根据我的阅读,除非绝对必要,否则似乎不建议使用 $rootScope.$broadcast 。我在服务中使用它来通知控制器变量已更改。这是不正确的吗?有更好的方法吗?我应该改用 watch 吗(即使变量只在用户交互时发生变化)?
服务:
function Buildservice($rootScope) {
var vm = this;
vm.box= [];
var service = {
addItem: addItem,
};
return service;
// Add item to the box
// Called from a directive controller
function addItem(item) {
vm.box.push(item);
broadcastUpdate();
}
function broadcastUpdate() {
$rootScope.$broadcast('updateMe');
}
// 在要通知的控制器中:
// Listener for box updates
$scope.$on('updateMe', function() {
// update variable binded to this controller
});
// 并且来自一个单独的指令控制器:
function directiveController($scope, buildservice) {
function addToBox(item){
buildservice.addItem(item);
}
所以这对我来说很好,但我不知道这是否是我应该这样做的方式。感谢帮助!