Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 从服务刷新特定控制器$scope_Angularjs_Service_Controller_Scope_Local Storage - Fatal编程技术网

Angularjs 从服务刷新特定控制器$scope

Angularjs 从服务刷新特定控制器$scope,angularjs,service,controller,scope,local-storage,Angularjs,Service,Controller,Scope,Local Storage,情况是这样的:我有一个服务,当我单击一些按钮时,它使用LocalStorage保存一些对象 这些本地存储对象连接到我的标题$scope。 问题是,我只在加载第一个页面时加载标题(及其$scope),然后它就会死机,因为没有必要每次更改页面时都加载它。 但是,实际上,当我在LocalStorage中保存完东西时,我需要标题来“重新加载”它的$scope,因为在它中我有一个标记,必须显示LocalStorage元素的更新长度(很明显,这是一个Cart标记) 那么,有没有办法从服务或其他控制器刷新特定

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

这些本地存储对象连接到我的标题$scope。 问题是,我只在加载第一个页面时加载标题(及其$scope),然后它就会死机,因为没有必要每次更改页面时都加载它。 但是,实际上,当我在LocalStorage中保存完东西时,我需要标题来“重新加载”它的$scope,因为在它中我有一个标记,必须显示LocalStorage元素的更新长度(很明显,这是一个Cart标记)

那么,有没有办法从服务或其他控制器刷新特定的控制器$scope?可能有$scope.$apply()之类的东西? 或者有一种方法可以绑定Header控制器中的LocalStorage元素,以便在它发生更改时执行某些操作


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()解决了我的问题:)