У меня есть проблема с обновлением значения между различными контроллерами страниц. Вот ситуация.
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
из этого руководства для отдельных контроллеров страниц: скрипка
Вы не можете просто перезагружать страницы, не теряя всех своих данных, вы это знаете? Ваш $rootScope
умирает, все умирает... :) Ваш пример совершенно неправильный. Либо используйте SPA-маршрутизацию, которая не заставляет перезагружать браузер, или использует некоторый тип локального хранилища для обеспечения безопасности данных.
Также я заметил, что вы привязываетесь к примитивам $scope.version = $rootScope.Data.Version;
- не делайте этого, используйте $scope.data = $rootScope.Data;
а затем {{data.Version}}
. В любом случае вы не должны использовать $ rootScope.
Вы знаете, что я нашел после использования Angular в течение 2 лет, что использование прямых переменных, таких как $ scope.version, не является лучшим для Angular, потому что они добавляют разные часы, и в вашем случае вы переписываете экземпляр "версии".
В любом случае, попробуйте написать так, чтобы все, что синхронизируется между различными контроллерами, службами, директивами и т.д.
var state = {
version: $rootScope.Data.Version,
anyOtherVariable: value
};
$scope.state = state;
Передайте значения между использованием контроллера и методом on. обратитесь к ссылке http://www.dotnet-tricks.com/Tutorial/angularjs/HM0L291214-Understanding- $ emit, - $ broadcast-and- $ on-in-AngularJS.html
ngStorage
для локального хранения.