Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在AngularJS应用程序中是否有一个地方可以定义全局$scope.data变量?_Angularjs - Fatal编程技术网

在AngularJS应用程序中是否有一个地方可以定义全局$scope.data变量?

在AngularJS应用程序中是否有一个地方可以定义全局$scope.data变量?,angularjs,Angularjs,我在AngularJS应用程序的许多地方使用了$scope.data.xxxx等。现在,我在每个控制器中声明$scope.data,如下所示: $scope.data = {} 有没有更好的地方让我这么做。例如,在.config或.run中设置app.js文件时,我是否可以更好地执行此操作?不太可能。如果你的应用程序有一个根控制器,其他的都嵌套在里面,你可以在那里设置$scope.data,但这可能不是你想要的-你所有的控制器都会使用相同的data对象。如果一个控制器改变了它,那么其他控制器也

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

$scope.data = {}

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

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


因为(我猜想)您希望在每个控制器中都有一个单独的
$scope.data
,所以您应该继续单独初始化每个控制器。

可以放置它的许多地方

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;
})

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

  • 使用
    $rootScope
    作为存储

  • 使用
    服务
    。服务是可以注入任何控制器并在控制器作用域中公开其值的单例

我建议您使用
服务
(至少对我来说,这是更好的方式)。从
$rootScope
所有控制器都可以看到您的全局


您可以在

中看到如何将服务用作存储的一个很好的示例,实际上我不需要在每个控制器中单独使用$scope.data。在.run或.config中,我可以在那里执行吗?在这种情况下,有三个选项-使用父控制器(例如,连接到body)、使用$rootScope或定义自定义服务。有关更多详细信息,请参见此答案-
$scope.data
是否在每种情况下都具有相同的值?它是配置的吗?我假设全局
myData
可以在一个页面中更新,并持久化到其他页面。但不知怎么的,它没有起作用。您能否在示例中向我们展示如何执行更新?谢谢。@Blaise在工厂或服务中创建一个getter和setter应该相当容易