gpt4 book ai didi

angularjs - 从服务中刷新特定 Controller $scope

转载 作者:行者123 更新时间:2023-12-02 01:51:56 24 4
gpt4 key购买 nike

情况是这样的:当我点击一些按钮时,我有一个使用 LocalStorage 来保存一些对象的服务。

这些 LocalStorage 对象连接到我的 Header $scope。问题是我只在加载第一页时加载标题(及其 $scope),然后它仍然卡住了,因为每次更改页面时都不需要加载它。但是,实际上,当我完成在 LocalStorage 中保存内容时,我需要 header “重新加载”它的 $scope,因为在其中我有一个徽章,必须显示 LocalStorage 元素的更新长度(这是一个购物车徽章,以说清楚)。

那么,有没有办法从服务或另一个 Controller 刷新特定 Controller $scope?也许有一些 $scope.$apply() 东西?或者有一种方法可以在 Header Controller 中绑定(bind) LocalStorage 元素,以便在它发生变化时执行某些操作?

PS:不,我不能从标题中移出购物车徽章,是的,我真的必须使用 LocalStorage(这是一个特定的请求)。

最佳答案

您需要在范围之间传递消息,因为 Angular 范围使用 prototype inheritance .简而言之,如果您的父作用域具有属性“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() .

关于angularjs - 从服务中刷新特定 Controller $scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com