Javascript 控制器生命周期和发射/广播
在我的页面上,我有一个网格,列出了web服务返回的所有文章。用户可以转到单独的页面添加新文章,完成后,该文章应添加到另一页面的网格中。因此,当用户返回到该页面时,文章将被列出 我有一个服务处理两个控制器之间的通信(一个用于网格,一个用于添加文章)。此服务有一个由AddArticleController调用的函数,该函数向my GridController广播消息:Javascript 控制器生命周期和发射/广播,javascript,angularjs,Javascript,Angularjs,在我的页面上,我有一个网格,列出了web服务返回的所有文章。用户可以转到单独的页面添加新文章,完成后,该文章应添加到另一页面的网格中。因此,当用户返回到该页面时,文章将被列出 我有一个服务处理两个控制器之间的通信(一个用于网格,一个用于添加文章)。此服务有一个由AddArticleController调用的函数,该函数向my GridController广播消息: function addNewArticle(articleNumber) { $rootScope.$emit('newA
function addNewArticle(articleNumber) {
$rootScope.$emit('newArticleAdded', {
articleNumber: articleNumber
});
}
gridController将拾取以下内容:
$rootScope.$on('newArticleAdded', function(event, data) {
// get all article details generated by the back-end and add it to he grid
});
问题是,当带有网格的页面已经显示多次时,文章会多次添加到网格中。我认为这是因为每次创建一个新的控制器时,旧的控制器并没有被破坏,所以广播会被多次拾取
我如何解决这个问题?显然,广播只应处理一次。承认我说这话是出于无知;让服务维护物品清单并让管理员观察是否更容易?它将避免通过作用域来回发送消息,并且有一个单一的真相来源。服务
myApp.service('myService',function($controller){
this.broadcastEvent = function(){
scope = $scope.$new();
$controller('mainCtrl',{
$scope:scope
});
scope.broadCastMethod();
}
});
控制器
myApp.controller('mainCtrl',function($scope){
$scope.broadCastMethod = function(){
$scope.$broadcast("callBraodcast");
}
})
使用$scope.$emit和$scope.$on,这样它就不会一次又一次地注册广播事件。你不能在服务中注入$scope…然后你可以使用$controller服务通过controllerI调用$broadcast。我真的不明白这一点。你能提供一个例子吗?我不明白…是的,服务部门实际上持有这份名单。然而,gridController上的其他函数也应该被调用;仅仅添加文章是不够的。是否可以获取gridController代码/html的其余部分?为什么从mainCtrl调用broadcast?因为如果从$scope调用$broadcast表单$scope,它将在视图更改时被销毁,而$on不会被多次调用