Angular does not update screen

0

angular.module("manuais", []);
angular.module("manuais").controller("manualCtrl", function($scope) {


  $scope.capitulo_itens = [{
    cod: 1,
    cod_capitulo: 1,
    tipo: 1,
    texto: "Titulo de um elemento",
    arquivo: ""
  }, {
    cod: 2,
    cod_capitulo: 1,
    tipo: 2,
    texto: "SubTitulo de um elemento",
    arquivo: ""
  }, {
    cod: 3,
    cod_capitulo: 1,
    tipo: 1,
    texto: "Titulo de um elemento",
    arquivo: ""
  }, {
    cod: 4,
    cod_capitulo: 1,
    tipo: 2,
    texto: "SubTitulo de um elemento",
    arquivo: ""
  }];

  $scope.limpaItens = function() {
    $scope.capitulo_itens = [];
    $(".elemento").remove();
  };

  $scope.insereItens = function() {
    $scope.capitulo_itens = [];
    $(".elemento").remove();

    array = [{
      cod: 1,
      cod_capitulo: 1,
      tipo: 1,
      texto: "Titulo de um elemento",
      arquivo: ""
    }, {
      cod: 2,
      cod_capitulo: 1,
      tipo: 2,
      texto: "SubTitulo de um elemento",
      arquivo: ""
    }, {
      cod: 3,
      cod_capitulo: 1,
      tipo: 1,
      texto: "Titulo de um elemento",
      arquivo: ""
    }, {
      cod: 4,
      cod_capitulo: 1,
      tipo: 2,
      texto: "SubTitulo de um elemento",
      arquivo: ""
    }];

    $scope.capitulo_itens = array;
  };


});


//diretiva que gera os elementos de acordo com seu tipo                                     
angular.module("manuais").directive("uiElemento", function($compile) {

  function link($scope, element, attributes) {
    var modelo = getTemplate( $scope.elemento.tipo);
        element.replaceWith($compile(modelo)($scope));

  };

  var getTemplate = function(contentType) {
    var templateLoader,
      templateMap = {
        1: "<h1 class='elemento' ng-click='selecionaElemento(elemento)'>{{elemento.texto}}</h1>",
        2: "<h2 class='elemento' ng-click='selecionaElemento(elemento)'>{{elemento.texto}}</h2>",
        3: "<p class='elemento' ng-click='selecionaElemento(elemento)'>{{elemento.texto}}</p>",
        4: "<div class='elemento img_container' ng-click='selecionaElemento(elemento)'><img class='figura' ng-src='{{elemento.arquivo}}'/><p>imagem</p></div>",
        5: "<div class='elemento img_container' ng-click='selecionaElemento(elemento)'><img class='figura' ng-src='{{elemento.arquivo}}'/><p>imagem</p></div>"
      },

      templateLoader = templateMap[contentType]

    return templateLoader;
  };

  return ({
    link: link,
    restrict: "E"
  });

});
h1 {
  font-size: 14px;
}
h2 {
  font-size: 13px;
}
#debug {
  background-color: #e2e2e2;
}
<html ng-app="manuais">

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script><scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>

<body ng-controller="manualCtrl">

  <button ng-click="insereItens()">Preencher</button>
  <button ng-click="limpaItens()">Limpar</button>

  <div id="corpo">
    <ui-Elemento ng-repeat="elemento in capitulo_itens">{{elemento.texto}}</ui-Elemento>
  </div>

  <div id="debug">
    {{  capitulo_itens }}
  </div>

</body>

</html>

I created a directive that receives the contents of the db and generates an element in html during my ng-repeat.

This directive works perfectly when there is content, after that, if I clean my array "capitulo_itens" the screen still remains with the previous content. This happens only if the array is empty, but if I populate it again the policy works and generates the content normally.

Thank you in advance!

UPDATE: The problem occurred because the policy only locked the elements, but did not remove those that had been inserted previously. According to the code, I used $ ('.element'). Remove (); to clear previous content;

    
asked by anonymous 04.05.2016 / 15:14

0 answers