【问题标题】:Is there a place where I can define a global $scope.data variable in my AngularJS app?有没有可以在我的 AngularJS 应用程序中定义全局 $scope.data 变量的地方?
【发布时间】:2013-11-21 19:19:02
【问题描述】:

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

$scope.data = {}

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

【问题讨论】:

  • $scope.data 在每种情况下的值都相同吗?是配置吗?

标签: angularjs


【解决方案1】:

你可以放很多地方

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

【讨论】:

  • 我假设全局myData 可以在一个页面中更新并持久保存到其他页面。但不知何故,它不起作用。您能否在您的示例中向我们展示如何执行更新?谢谢。
  • @Blaise 通过在工厂或服务中创建 getter 和 setter 应该相当容易
【解决方案2】:

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

  • 使用$rootScope作为存储。

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

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

Fiddle 中可以看到如何使用服务作为存储的好例子

【讨论】:

    【解决方案3】:

    不是真的。如果您的应用程序有一个其他嵌套在其中的根控制器,您可以在那里设置$scope.data,但这可能不会满足您的要求——您的所有控制器都将使用相同的data 对象。如果一个控制器更改了它,它也会在其他所有控制器中更改。

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

    【讨论】:

    • 其实我不需要在每个控制器中单独的 $scope.data 。在 .run 或 .config 中我可以在那里做吗?
    • 在这种情况下,有三个选项 - 使用父控制器(例如附加到主体),使用 $rootScope 或定义自定义服务。有关更多详细信息,请参阅此答案 - stackoverflow.com/questions/11938380/…
    猜你喜欢
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多