Angular Global变量与$ scope具有相同的可见性和用法吗?

时间:2013-11-16 17:00:03

标签: angularjs

我刚刚了解到Angular有全局变量:

Angular Values

var app = angular.module('mySuperDuperApp', ['SomeExternalModule']);

// Define global variables
app.value('globals', {
        db : null,
        databasename : "serviceapp",
        image_max_height: 620,
        image_quality: 0.7
    }
);

有关使用的一些问题。

  • 全局变量的值是否可以更改?
  • 要更改它(如果可能的话)我可以在任何控制器脚本中用它的名称来引用它吗?
  • 我是否可以仅使用名称访问HTML中的全局变量?

2 个答案:

答案 0 :(得分:5)

加载到value提供商的变量在传统意义上并不是真正的全局变量。它并不位于全局名称空间中。提供者需要在您使用它的任何地方注入,因此它更像OO意义上的对象。

value提供商是一种允许许多不同组件访问变量的方法,因此我明白为什么您将其称为全局变量。但是value是一种分享数据的好方法,而没有实际全局变量的许多风险。

您可以查看Provider docs中不同类型的提供商,其中您value只有一个。

1)您可以更改Angular value(但不是与const密切相关的内容)

2)您需要在value注入value,然后在其前面添加app.controller('Ctrl', function($scope, global ) { console.log(global.db); global.databasename = "newname"; }); 的名称。例如:

app.controller('Ctrl', function($scope, global ) {
     $scope.db = global.db;
});

3)如果将值复制到适当的范围,则可以从HTML访问该值:

{{1}}

答案 1 :(得分:2)

您可以inject这些值就像注入控制器或服务一样,并且可以像修改任何其他注入对象一样修改它们。

app.controller("mySuperDuperController", function ($scope, 'globals') {
  $scope.globals = globals;   // <-- to access them in the template
  globals.db = 'newDb';       // <-- modify their value.
});