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