当我在其他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>
<button class="btn btn-xs btn-outline btn-info" ng-click="definirTipoCid('info', cid, $index)"><label>Média</label></button>
<button class="btn btn-xs btn-outline btn-warning" ng-click="definirTipoCid('warning', cid, $index)"><label>Grave</label></button>
<button class="btn btn-xs btn-outline btn-danger" ng-click="definirTipoCid('danger', cid, $index)"><label>Gravíssima</label></button>
</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;
}
有人提出任何想法吗? 谢谢。
答案 0 :(得分:1)
如果产品在两个类别中相同,则会更改两者(因为它们是相同的对象),您可以做的就是之前克隆每个类别的产品。
category.products = angular.copy(original_products)
像这样的东西。这里是复制文档:https://docs.angularjs.org/api/ng/function/angular.copy
另一个提示,从不在控制器中使用DOM,请使用指令。
答案 1 :(得分:1)
这是Angularjs的主要问题,它是克隆的,实际上它提供了对它们的反射而不是数据,我通过将元素推入单独的数组或容器解决了问题,然后工作正常我。 谢谢