你如何使用Angular Js声明一个全局变量?

Nee*_*eel 18 angularjs

我想要一个可以在所有控制器中使用但不想为它创建服务的变量.是否可以在角度js中使用?

Ase*_*tam 31

您可以使用常量或值.

常量

var app = angular.module('myApp', []);
app.constant('appName', 'Application Name');

app.controller('TestCtrl', ['appName', function TestCtrl(appName) {
    console.log(appName);
}]);
Run Code Online (Sandbox Code Playgroud)

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

app.value('usersOnline', 0);
app.controller('TestCtrl', ['usersOnline', function TestCtrl(usersOnline) {
    console.log(usersOnline);
    usersOnline = 15;
    console.log(usersOnline);
}]);
Run Code Online (Sandbox Code Playgroud)

http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/


Mat*_*iba 10

使用value()定义的对象,你的"全局变量"存储为对象的属性.然后将该对象作为依赖项添加到需要访问其属性的任何控制器.这具有将所有变量封装到单个对象中的积极副作用,该对象整齐且不太可能遭受命名空间冲突.

这是模式:

app.value('myVars', {
    usersOnline:0
});
app.controller('TestCtrl', ['myVars', function TestCtrl(myVars) {
    console.log(myVars.usersOnline);
    myVars.usersOnline = 15;
    console.log(myVars.usersOnline);
}]);
Run Code Online (Sandbox Code Playgroud)

仅供参考Aseem的答案是行不通的,因为他的例子使用value()的是原始类型.要清楚什么不起作用:

app.value('usersOnline', 0);
app.controller('TestCtrl', ['usersOnline', function TestCtrl(usersOnline) {
    console.log(usersOnline);
    usersOnline = 15; // <-- THIS WILL NOT PERSIST outside the controller.
    console.log(usersOnline);
}]);
Run Code Online (Sandbox Code Playgroud)