2015-04-22 84 views
0

我一直在試驗AngularJS值,並希望存儲一個全局值,以訪問和設置在不同的控制器。設置AngularJS全局值來訪問和設置跨控制器

所以我一直在嘗試用價值投資法,像這樣:

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

app.value('globalValue', 0); 

app.controller('myCtrl', ['$scope', '$rootScope', 'globalValue', function($scope, $rootScope, globalValue) { 
    $scope.updateValue = function() { 
     globalValue++; 
    };  
}]); 

app.controller('myCtrlB', ['$scope', '$rootScope', 'globalValue', function($scope, $rootScope, globalValue) { 
     $scope.someValueB=globalValue; 

}]); 

這裏有一個fiddle

所以在我的小提琴,點擊該按鈕時,這是行不通的,因爲我認爲這可能,爲了增加我的'全局',myCtrlB中的範圍屬性不會改變。

我已經清楚地瞭解了這個錯誤的方法,我完全誤解了如何在這裏使用value()嗎?

感謝

+0

您是否嘗試過使用angular.constant()? – jcc

+1

@ user1518802常數也會起作用,儘管它有點誤稱,因爲該值不會隨時間而保持不變。在功能方面,它會工作得很好,因爲常量也只是一個比.value限制更少的提供者https://docs.angularjs.org/guide/providers問題仍然是相同的,儘管因爲賦值而不是參考。 – shaunhusain

回答

2

此代碼應工作基本上你需要一個對象,因此兩個控制器在同一對象指向和對象的一些屬性改變。否則,你將globalValue的初始值賦給某個​​局部變量,但它不是一個引用。

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

app.value('globalValue', {counter:0}); 

app.controller('myCtrl', ['$scope', '$rootScope', 'globalValue', function($scope, $rootScope, globalValue) { 
    $scope.updateValue = function() { 
     globalValue.counter++; 
    };  
}]); 

app.controller('myCtrlB', ['$scope', '$rootScope', 'globalValue', function($scope, $rootScope, globalValue) { 
     $scope.someValueB=globalValue; 

}]); 

更新小提琴:http://jsfiddle.net/kfxy5hs1/3/

+0

好吧,那麼myCtrB中的$ scope.someValueB如何解析爲globalValue.counter?我期待該行讀取$ scope.someValueB = globalValue.counter;如果在app.value()調用中的globalValue對象中設置了多個屬性會怎麼樣? – mindparse

+0

@mindparse在使用myCtrlB的視圖中我剛剛更新了綁定,指向使用provider/value定義定義的對象的特定屬性。任何時候你分配一個字符串或一個基元(任何不是對象的東西),你實際上都會複製這個值。在JS中,如果你分配一個對象,你正在設置一個新的指針指向同一個對象,所以當你改變對象的屬性時,兩個指針都指向同一個對象。 – shaunhusain

+0

Doh我忽略了你的視圖版本{{someValueB.counter}}!現在有道理,謝謝! – mindparse