如何访问不同页面控制器中的更新值?
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;
我在不同页面控制器之间获取更新值时遇到问题,情况如下。
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;