我有一个指令,它会监视新旧值的输入框。我想在这里更新一下根镜的价值"总计" 。我试图使用所有,我知道像$ rootScope,广播消息,发出消息。这是代码。
app.directive('costCheck',function($compile,$rootScope,$timeout){
$rootScope.gName= "What did i buy?";
return{
restrict: 'A',
link: function(scope,element,attrs){
attrs.$observe('costCheck',function(value){
});
scope.$watch('cost',function(oldval,newval){alert(attrs.name);
alert(oldval+'--'+newval);
var message = {type: 'channel', action: 'create', data: { name: "ssss", id: 0}};
$rootScope.$broadcast('get',message);
});
}
}
});
这是我的主要控制器
app.controller('MainCtrl', function($scope,$rootScope) {
$scope.totalCost = 'workinggg';
$rootScope.$on('go', function() {alert();
$scope.totalCost = 'working';
});
});
如何更新rootcope。
答案 0 :(得分:1)
我同意@haki的评论,你应该如图所示绑定控制器/指令的范围值。
scope : { value : '=value'}
但是如果你想要出于其他原因(即其他控制器)进行广播,那么将$ rootScope。$ on更改为$ scope。$ on。 $ scope是$ rootScope的子节点,广播将消息发送到子范围。
这是一个fiddle,显示了对指令范围的绑定。
编辑: fiddle更新以在指令
中设置$ rootScope上的totalCost编辑2: fiddle从$ rootScope更新广播值,并在另一个控制器中处理
答案 1 :(得分:0)
有很多方法可以实现这一点,我不会这样做,但我只是想让你的代码在这里工作。
指令代码:
$rootScope.$emit('totalCostUpdated',message);
主控制器:
app.controller('MainCtrl', function($scope,$rootScope) {
$scope.totalCost = 'workinggg';
$rootScope.$on('totalCostUpdated', function(event, args) {
$scope.totalCost = 'working';
});
});
但是,我可能会使用共享服务。看看https://egghead.io/lessons/angularjs-sharing-data-between-controllers。