Angularjs 从服务刷新特定控制器$scope
情况是这样的:我有一个服务,当我单击一些按钮时,它使用LocalStorage保存一些对象 这些本地存储对象连接到我的标题$scope。 问题是,我只在加载第一个页面时加载标题(及其$scope),然后它就会死机,因为没有必要每次更改页面时都加载它。 但是,实际上,当我在LocalStorage中保存完东西时,我需要标题来“重新加载”它的$scope,因为在它中我有一个标记,必须显示LocalStorage元素的更新长度(很明显,这是一个Cart标记) 那么,有没有办法从服务或其他控制器刷新特定的控制器$scope?可能有$scope.$apply()之类的东西? 或者有一种方法可以绑定Header控制器中的LocalStorage元素,以便在它发生更改时执行某些操作Angularjs 从服务刷新特定控制器$scope,angularjs,service,controller,scope,local-storage,Angularjs,Service,Controller,Scope,Local Storage,情况是这样的:我有一个服务,当我单击一些按钮时,它使用LocalStorage保存一些对象 这些本地存储对象连接到我的标题$scope。 问题是,我只在加载第一个页面时加载标题(及其$scope),然后它就会死机,因为没有必要每次更改页面时都加载它。 但是,实际上,当我在LocalStorage中保存完东西时,我需要标题来“重新加载”它的$scope,因为在它中我有一个标记,必须显示LocalStorage元素的更新长度(很明显,这是一个Cart标记) 那么,有没有办法从服务或其他控制器刷新特定
PS:不,我不能从标题中移出购物车徽章,是的,我真的必须使用LocalStorage(这是一个特定的请求).您可以使用
$rootScope
而不是标头中的$scope
,并且可以从另一个控制器更新$rootScope
值。通常通过使用$rootScope
中的数据来“刷新”控制器,但是通过使用$emit
方法创建和发出自定义事件
您可以通过$rootScope
发出自己的事件,然后它将传播到所有子作用域,您可以在其中侦听该事件
////// controller or service or directive
$rootScope.$emit('myOwnEvent', dataObj);
////// another controller
$scope.$on('myOwnEvent', function(newData) {
$scope.data = newData; // or whatever
});
您需要在作用域之间传递消息,就像角度作用域使用的那样。简而言之,如果您有一个属性为“foo”的父范围,并且您在子范围中更新了“foo”,则子范围将获得“foo”的“新副本” 要实现您想要的功能,可以通过作用域层次结构发送事件更新并接收事件。像这样的
function ParentController($scope, ...) {
$scope.numberOfThings = 5;
// Process 'updateThings' event
$scope.$on('updateThings', function(value) {
$scope.numberOfThings = value;
});
}
...
function ChildController($scope, ...) {
$scope.someCallback = function() {
// Send 'updateThings' up the scope chain.
$scope.$emit('updateThings', 47);
}
}
如果您想以另一种方式执行此操作,可以通过作用域链向下推送事件,您可以使用。您可以发布一些示例代码,可能是plunker吗?我想使用$scope.$watch(function(){return myService.getCount()},function(){$scope.count=myService.getCount()})之类的东西可能会有用;谢谢,真的很有帮助。使用带有按钮div controller的emit()和带有标头中rootController的on()解决了我的问题:)