【发布时间】:2015-07-05 22:32:48
【问题描述】:
我在ng-repeat 的视图中使用了一个数组。之后,我每 10 秒更新一次该数组,并在界面中更改我的值。我希望能够在更新一个值时调用函数$scope.alertFunction。
例如我有一个值为0的字段,当数组更新时,该字段的值为1,在界面上我会看到1而不是0,那一刻我想要触发此功能alertFunction。谁能帮帮我?
【问题讨论】:
我在ng-repeat 的视图中使用了一个数组。之后,我每 10 秒更新一次该数组,并在界面中更改我的值。我希望能够在更新一个值时调用函数$scope.alertFunction。
例如我有一个值为0的字段,当数组更新时,该字段的值为1,在界面上我会看到1而不是0,那一刻我想要触发此功能alertFunction。谁能帮帮我?
【问题讨论】:
在您的控制器中,您可以像这样查看数组:
$scope.$watch('myArray', function(){
//something happenned
}, true);
【讨论】:
所以我有一个数组
$scope.items = [{field_first: 0, field_sec: 1},{field_first: 1, field_sec: 3},{field_first: 0, field_sec: 0}]
10 秒后我就会有
$scope.items = [{field_first: 0, field_sec: 1},{field_first: 1, field_sec: 3},{field_first: 1, field_sec: 0}]
在这种情况下,它已更新 $scope.items[2]["field_first"] 而不是 0,它现在的值为 1。我想触发该字段的事件。
【讨论】:
这一切都应该在您的控制器中完成,所以不用担心 ng-repeat。
监视非常有用,但它们也可能很昂贵,因为它们会在每个摘要中执行,每当您的范围内发生任何事情发生变化时。
另外,如果你在整个数组上放置一个手表,那么它不会告诉你哪些元素发生了变化,只有 something 有。
在这种情况下,更新数组的代码是您可以控制的,因此您不需要单独的手表,您应该能够在更新时检查更改。
例如:
function updateItems(newItems) {
$scope.items.forEach(function(obj, i) {
Object.keys(obj).forEach(function(f) {
var oldValue = obj[f];
var newValue = newItems[i][f];
if(newValue !== oldValue) {
$scope.alertFunction({
index: i,
field: f,
oldValue: oldValue,
newValue: newValue
});
}
});
});
$scope.items = newItems; // assuming you don't mind the array ref changing
}
编辑以使用您的示例。
【讨论】: