0

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

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>

应用程序.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本教程中的单独页面控制器:小提琴

4

3 回答 3

3

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

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

于 2015-06-29T10:10:40.527 回答
0

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

于 2015-06-29T09:51:10.340 回答
0

你知道我在使用 Angular 2 年后发现了什么,使用像 $scope.version 这样的直接变量对 Angular 来说并不是最好的,因为它们添加了不同的手表,而在你的情况下,你正在重写“版本”的实例。

不管怎样,试着像这样写所有在不同控制器、服务、指令等之间同步的东西。

    var state = {
        version: $rootScope.Data.Version,
        anyOtherVariable: value
    };
    $scope.state = state;
于 2015-06-29T10:24:39.100 回答