动态设置类型 - 颜色时,Ng-repeat会生成错误

时间:2015-09-21 18:38:34

标签: javascript angularjs

当我在其他ng-repeat内部的ng-repeat中使用插件警报时,我遇到了一些问题。

我有一个屏幕,我必须选择一个类别,然后我需要选择一些产品。此选定产品显示在警报插件中,我有四个按钮可选择所选产品的重要级别。

每个按钮,在警报容器中设置不同的样式,成功,信息,警告和危险。

问题是:如果我为这两个类别选择两个类别和相同的产品,当我更改一个产品的样式时,另一个相同的产品也会设置样式。

我的代码是:

<div style='position:relative; top:0px; left:0px;' ng-repeat="cid in listaCidSelected[$index]">
    <alert type="{{cid.type}}" close="removerCid(tuss, cid, $index)">
        {{cid.CIDSC_DS_DESCRICAO}}
        <button class="btn btn-xs btn-outline btn-primary" ng-click="definirTipoCid('success', cid, $index)"><label>Sem Importância</label></button>&nbsp;
        <button class="btn btn-xs btn-outline btn-info" ng-click="definirTipoCid('info', cid, $index)"><label>Média</label></button>&nbsp;
        <button class="btn btn-xs btn-outline btn-warning" ng-click="definirTipoCid('warning', cid, $index)"><label>Grave</label></button>&nbsp;
        <button class="btn btn-xs btn-outline btn-danger" ng-click="definirTipoCid('danger', cid, $index)"><label>Gravíssima</label></button>&nbsp;
    </alert>
</div>

如果我选择了两个或更多类别并为每个类别使用相同的产品,则此产品的提醒会重复相同的样式:(type="{{cid.type}}"

补充控制器方法:

$scope.checkAssociarCidHandler = function(tuss, index, event){
      $scope.listaCheckCid[index] = !$scope.listaCheckCid[index];
      event.currentTarget.innerHTML = $scope.listaCheckCid[index] ? "Finalizar Associação" : "Associar Motivo(s)";
      // Seleciona os checks com as CIDs ja selecionadas
      if ($scope.listaCheckCid[index]){
          for (var i = 0; i < $scope.listaTussSelected.length; i++) {
              if ($scope.listaTussSelected[i].TUSSPR_CD_CODIGO == tuss.TUSSPR_CD_CODIGO){
                  for (var j = 0; j < $scope.listaCidSelected[i].length; j++) {
                      document.querySelector("#ckItemCheckT" + tuss.TUSSPR_CD_CODIGO + 'C' + $scope.listaCidSelected[i][j].CIDSC_CD_CODIGO).checked = true;   
                  }
                  break;
              }
          }
      }
  }


  $scope.checkCidHandler = function(cid, tuss, event){
      for (var i = 0; i < $scope.listaTussSelected.length; i++) {
          if ($scope.listaTussSelected[i].TUSSPR_CD_CODIGO == tuss.TUSSPR_CD_CODIGO){
              // Associa uma CID
              if (event.currentTarget.checked){
                  cid.type = "info";
                  $scope.listaCidSelected[i].push(cid);
              }else{
                  // Desassocia uma CID
                  for (var j = 0; j < $scope.listaCidSelected[i].length; j++) {
                      if ($scope.listaCidSelected[i][j].CIDSC_CD_CODIGO == cid.CIDSC_CD_CODIGO){
                          $scope.listaCidSelected[i].splice(j, 1);
                          break;
                      }
                  }
              }
              break;
          }
      }
  }

  // Define a cor da CID
  $scope.definirTipoCid = function(tipo, cid, index){
      cid.type = tipo;
  }

有人提出任何想法吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

如果产品在两个类别中相同,则会更改两者(因为它们是相同的对象),您可以做的就是之前克隆每个类别的产品。

category.products = angular.copy(original_products)

像这样的东西。这里是复制文档:https://docs.angularjs.org/api/ng/function/angular.copy

另一个提示,从不在控制器中使用DOM,请使用指令。

答案 1 :(得分:1)

这是Angularjs的主要问题,它是克隆的,实际上它提供了对它们的反射而不是数据,我通过将元素推入单独的数组或容器解决了问题,然后工作正常我。 谢谢