我有一個警報系統,用戶需要能夠創建無限數量的警報,併爲每個警報添加無限數量的觸發器。將新對象添加到陣列時出現角度陣列重複錯誤
例如,用戶可能會有一個名爲「當我的汽車價格變化時」的警報。他們需要能夠爲他們想要遵循的每輛車創建相同類型的觸發器(「價格變化」)。
接下來是一個精簡版,只處理觸發器。
- 只需按兩次Add
即可看到問題。
JS
// the array of trigger possibilities
$scope.triggerOptions = [
{id : 0, type: 1, action: "Status Update For Brand"},
{id : 1, type: 2, action: "Price Changed for "}
];
// the model for the select element
$scope.selected = $scope.triggerOptions[0];
// this array will hold all the triggers created
$scope.triggers = [];
// add some indexes to the new trigger object, then add it to triggers
$scope.addTrigger = function() {
var newTrigger = $scope.selected;
var newID = $scope.triggers.length;
var alertID = 0; // todo: apply alert id
newTrigger.triggerID = newID;
newTrigger.alertID = alertID;
$scope.triggers.push(newTrigger);
};
HTML
<select ng-options = "option.action for option in triggerOptions track by option.id" ng-model = "selected"></select>
<button ng-click="addTrigger()">Add</button>
<div ng-repeat="trigger in triggers track by triggerID" class="alert-tool-action-box">
<div ng-show="trigger.type==1">
<div>{{trigger.action}}</div>
</div>
<div ng-show="trigger.type==2">
<div>{{trigger.action}}</div>
</div>
</div>
問題
- 當我添加多個觸發器,只顯示第一個觸發器,但我得到一個「傻瓜」error message(這表明我添加了'追蹤',但我已經這樣做了)。
- 當我連續添加兩個相同類型的觸發器,該triggerID更新爲新triggerID兩個觸發器:
一個觸發器:
[{"id":0,"type":1,"action":"Status Update For Brand","triggerID":0,"alertID":0}]
兩個觸發器:
[
{"id":0,"type":1,"action":"Status Update For Brand","triggerID":1,"alertID":0},
{"id":0,"type":1,"action":"Status Update For Brand","triggerID":1,"alertID":0}
]
我應該可以在添加它們時看到每個觸發器,即使它們與之前的相同。
TL; DR; 'track by'必須是唯一的,所以'triggerID'不能包含愚蠢。你總是可以用'$ index'來試試和追蹤。 –
或者根本不使用軌道。但爲什麼你首先有兩個具有相同ID的觸發器?不是一個ID應該唯一標識一個觸發器? –