情况是这样:我有一个服务,当我单击某些按钮时,该服务使用LocalStorage保存一些对象。
这些LocalStorage对象连接到我的Header $ scope。问题是,我只在加载第一页时才加载标头(及其$ scope),然后卡住,因为每次更改页面时都无需加载它。但是,实际上,在将内容保存到LocalStorage之后,我需要标题“重新加载”它的$ scope,因为在其中,我有一个徽章,必须显示LocalStorage元素的更新长度(这是Cart徽章,用于清楚)。
因此,是否有一种方法可以从服务或另一个控制器刷新特定的控制器$ scope?也许有一些$ scope。$ apply()的东西?还是有一种方法可以在Header控制器中绑定LocalStorage元素,以便在更改后执行某些操作?
PS:不,我不能从标题中移出购物车标志,是的,我真的必须使用LocalStorage(这是一个特定的请求)。
您需要在范围之间传递消息,因为角度范围使用原型继承。简而言之,如果您的父作用域具有属性“ foo”,并且在子作用域中更新“ foo”,则子作用域将获得“ foo”的“新副本”。
要实现所需的功能,可以使用$scope.$emit()
整个作用域层次结构发送事件更新并$scope.$on()
接收事件。这样的事情。
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);
}
}
如果您想以其他方式执行此操作,则可以将事件向下推到整个作用域链中,可以使用$scope.$broadcast()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句