我有一个指令,一个控制器和一个提供程序:
var note = angular.module('note', []);
note.controller('noteController',function($scope,$note){
$scope.queue = $note.getQueue();
});
note.directive('note',function($note){
return{
restrict: 'A',
template:
'<div ng-repeat="notification in queue">' +
'<p>{{notification.message}}</p>' +
'</div>',
link: function(scope,element,attr, noteController){
noteController.$watch($note.queue,function(){
scope.queue = $note.getQueue();
})
},
controller: 'noteController'
}
});
note.provider('$note',function(){
this.$get = function($timeout){
var queue = [];
function note(){
}
note.prototype.show = function(msg){
var notification = {
'message': msg
};
queue.push(notification);
};
return{
getQueue: function(){
return queue;
},
note: function(){
return new note();
}
}
}
})
在我的应用程序主模块中,我同时注入了提供者和注释模块。
我创建一个
note
实例并启动它的show()
方法。效果很好,正在显示注释。但是,如果我在另一个extern模块中执行完全相同的操作,notecontroller.queue将不会更新。
我创建了一个简单的plnkr来显示问题:
http://plnkr.co/edit/dtPF4rBocLw9gWrmO3cP?p=preview
最佳答案
您在问题中发布的代码与您所面临的问题无关,问题出在验证器中,您正在调用preventDefault()
。输入元素的默认行为被取消,并且您没有手动调用$digest
,因此没有什么可触发摘要循环。
两种解决方案:
删除e.preventDefault();
在scope.$digest()
处理程序中调用keydown
http://plnkr.co/edit/HtjnNmored70rAPOOMg6
关于javascript - 如何正确观察变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17489024/