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> 

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從這個教程seprate頁控制器:fiddle

+0

您jsfiddle似乎不符合您提供的代碼。我的意思是你的小提琴裏的'rootScope'在哪裏? – nalinc

+0

我使用Google搜索並獲得了jsfiddle教程。對於單頁多個控制器正在工作。但我需要多個頁面控制器。 – s1lam8u

+0

你如何渲染單獨的頁面(視圖)? ng-route或ui-router? – nalinc

回答

3

您不能只重新加載頁面而不會丟失所有數據,您知道嗎?你的$rootScope死亡,一切都會死亡...... :)你的例子是完全錯誤的。 使用SPA路由這不會強制瀏覽器重新加載或使用某種類型的本地存儲用於保持數據安全。

另外我注意到,你綁定到基元$scope.version = $rootScope.Data.Version; - 不這樣做,使用$scope.data = $rootScope.Data;,然後{{data.Version}}。無論如何,你根本不應該使用$ rootScope。

+0

@smaji,非常感謝。我知道如果一個頁面重新加載數據我會鬆動但我的情況,我不得不在頁面之間重定向。我嘗試了它正在工作的cookie,但是如果我在page1.html中存儲cookie變量(例如:cookie_name =「value1」),我可以在page2.html中訪問,如果我想將其他值設置爲相同的cookie變量(例如:cookie_name =「value2」),從page1.html存儲後,我無法訪問最新的更新。 – s1lam8u

+0

我想,我必須使用'ngStorage'作爲本地存儲。 – s1lam8u

+0

@Silambu是的,在我的項目中,我使用了gsklee/ngStorage和auth0/angular-storage。對於初學者,我建議使用ngStorage。 :) – smajl

0

你知道我在使用Angular 2年後發現了什麼,使用直接變量(如$ scope.version)並不是Angular的最佳選擇,因爲它們添加了不同的手錶,在你的情況下,你正在重寫'version' 。

無論如何,儘量寫一些什麼是不同的控制器,服務,指令等之間的同步。

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