我不知道更好的方式来表达这个问题。我写了一个基本服务供两个控制器使用。
JsFiddle:http://jsfiddle.net/aditya/2Nd8u/2/
点击“通知”按预期工作;它会向数组添加通知。但'重置'打破了它。 “重置”后单击任一按钮不会执行任何操作。有谁知道这里发生了什么?
PS。我认为它与Angular失去引用有关,因为notifs
被重新分配(技术上),所以我写了getter和setter,但即使清空数组也涉及pop()
直到它为空,这看起来效率不高。
如果JsFiddle关闭,则为Plunkr:http://plnkr.co/edit/mzfLLjFXCwsxM5KDebhc
答案 0 :(得分:4)
我已经分配了你的plunker并提出了解决方案:
在reset函数中,尝试删除数组的对象,而不是声明为新的空数组:
notificationService.notifs.splice(0, notificationService.notifs.length);
或者,像@Wizcover建议的那样:
notificationService.notifs.length = 0
这将通知角度是原始数组中的修改。
答案 1 :(得分:2)
我将您的服务更改为:
.factory("notificationService", function(){
var notifications = [];
return {
notifs: notifications,
clear: function(){
angular.copy([], notifications);
},
get: function(){
return notifs;
}
}
})
和您的控制人员:
$scope.reset = function(){
console.log("reset");
notificationService.clear();
console.log(notificationService);
}
它适用于我。
当然它应该有点整洁,因为你应该有一个get,添加和删除方法,而不是通知,但我只想告诉你代码改变的地方。
angular.copy
是确保在angular的生命周期内进行更改的方法。
由于你无法绑定变量而只能绑定方法,你可以这样做:
$scope.getNotifications = notificationService.get;
这应该有效。