如何访问不同页面控制器中的更新值?

How to access updated value in different page controllers?

我在不同页面控制器之间获取更新值时遇到问题,情况如下。

page1.html

<body ng-app="app">
<div  ng-controller="ctrl1">{{ version }}</div>
</body>

page2.html

<body ng-app="app">
<div  ng-controller="ctrl2">{{ version }}</div>
</body>

app.js

 var app = angular.module("app", []);

 app.run(function($rootScope) {
   $rootScope.Data = [];
   $rootScope.Data.Version = '1.0.0.1';
 });

  app.controller('ctrl1', function($scope, $rootScope){
   $scope.version = $rootScope.Data.Version;
   $rootScope.Data.Version = '1.0.0.2';
  });

 app.controller('ctrl2', function($scope, $rootScope){      
   $scope.version = $rootScope.Data.Version;
 });

结果

version: 1.0.0.1 // page1.html 
version: 1.0.0.1 // page2.html 

预期结果

version: 1.0.0.1 // page1.html 
version: 1.0.0.2 // page2.html 

如何实现这种情况?

我尝试将本教程中的 $broadcast 用于单独的页面控制器:fiddle

在控制器使用广播和 on 方法之间传递值。请参考 link http://www.dotnet-tricks.com/Tutorial/angularjs/HM0L291214-Understanding-$emit,-$broadcast-and-$on-in-AngularJS.html

您不能只重新加载页面而不丢失所有数据,您知道吗?你的 $rootScope 死了,一切都死了...... :) 你的例子是完全错误的。 使用不强制浏览器重新加载的 SPA 路由,或者使用某种类型的本地存储来保证数据安全。

我还注意到您正在绑定原语 $scope.version = $rootScope.Data.Version; - 不要那样做,使用 $scope.data = $rootScope.Data; 然后 {{data.Version}}。无论如何,你根本不应该使用 $rootScope。

你知道我在使用 Angular 两年后发现的,使用 $scope.version 这样的直接变量并不是 Angular 的最佳选择,因为它们添加了不同的手表和在您的情况下,您正在重写 'version'.

的实例

无论如何,尝试像这样编写在不同控制器、服务、指令等之间同步的所有内容。

    var state = {
        version: $rootScope.Data.Version,
        anyOtherVariable: value
    };
    $scope.state = state;