2013-11-09 17 views
2

我在我的AngularJS應用程序的許多地方使用$scope.data.xxxx等。現在我宣佈$ scope.data在每個控制器是這樣的:

$scope.data = {} 

是否有更好的地方爲我做到這一點。例如,我可以在.config或.run中設置我的app.js文件時更好地執行此操作嗎?

+0

看到的是'$在任何情況下scope.data'相同的值?它是配置嗎? –

回答

5

許多地方,你可以把它

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

隨着服務

app.factory('myData',function(){ 
    return { foo:'bar'} 

}); 

由於價值

app.value('myData', { foo:'bar'}); 

恆定

app.constant('myData', { foo:'bar'}); 

在每種情況下將在控制器指令注入myData,其他服務等來訪問它

app.controller('SomeController',function($scope, myData){ 
    $scope.data=myData; 
}) 
+0

我認爲全球'myData'可以更新在一個頁面,並持續到其他頁面。但不知何故,它沒有奏效。您能否向我們展示如何執行更新?謝謝。 – Blaise

+0

@Blaise應該很容易在工廠或服務中創建一個getter和setter – charlietfl

1

不是。如果你的應用程序有一個其他的嵌套的根控制器,你可以在那裏設置$scope.data,但這可能不會做你想做的事 - 你的所有控制器都會使用相同的data對象。如果一個控制器改變它,它也會在每個其他控制器中改變。

因爲(我想)你想在每個控制器中單獨使用$scope.data,你應該繼續分別初始化每一個控制器。

+0

其實我不需要在每個控制器中單獨使用$ scope.data。在.run或.config中如何可以在那裏做到? – Alan2

+0

在這種情況下,有三種選擇 - 使用父控制器(附加到身體),使用$ rootScope或定義自定義服務。看到這個答案更詳細 - http://stackoverflow.com/questions/11938380/global-variables-in-angularjs?rq=1 – joews

3

可以使用至少2種選擇:

  • 使用$rootScope作爲存儲。使用service。服務是可以注入任何控制器並在控制器範圍內公開它們的值的單例。

我建議你使用service(至少對我來說,它是更好的方法)。從$rootScope所有控制器可以看到你的全局

很好的例子如何使用服務作爲存儲你可以在Fiddle

相關問題