我可以在AngularJS应用程序中定义全局$ scope.data变量吗?

时间:2013-11-09 18:58:52

标签: angularjs

我在AngularJS应用程序的许多地方使用$scope.data.xxxx等。现在我在每个控制器中声明$ scope.data,如下所示:

$scope.data = {}

我有更好的地方做这件事。例如,我可以在.config或.run中设置我的app.js文件时更好地执行此操作吗?

3 个答案:

答案 0 :(得分: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;
})

答案 1 :(得分:3)

您可以使用至少2个选项:

  • 使用$rootScope作为存储。

  • 使用service。服务是可以注入任何控制器并在控制器范围内公开其值的单例。

我建议您使用service(至少对我而言,更好的方式)。来自$rootScope 所有控制器都可以看到您的全局

如何将服务用作存储,您可以在 Fiddle

中看到

答案 2 :(得分:1)

不是真的。如果你的应用程序有一个其他嵌套在其中的根控制器你可以在那里设置$scope.data,但这可能不会做你想要的 - 你的所有控制器都会使用相同的data对象。如果一个控制器改变它,它也会在每个其他控制器中改变。

因为(我推测)你想在每个控制器中单独$scope.data,你应该继续单独初始化每一个。