Javascript 使用';全球';AngularJS上的变量
好的,我和一位同事就如何在AngularJS上正确使用全局变量进行了激烈的争论。他的理由是:有很多方法可以“做”事情 考虑这一点:Javascript 使用';全球';AngularJS上的变量,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-service,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Service,好的,我和一位同事就如何在AngularJS上正确使用全局变量进行了激烈的争论。他的理由是:有很多方法可以“做”事情 考虑这一点: var app = angular.module('myApp', []); app.globalVar = []; // this is just to store same data later 然后在一些指令/服务上: app.directive('myDirective', function(){ app.globalVar = [23,43,2
var app = angular.module('myApp', []);
app.globalVar = []; // this is just to store same data later
然后在一些指令/服务上:
app.directive('myDirective', function(){
app.globalVar = [23,43,21]; // populating from a json or other source
});
app.directive('myDirective2', function(){
var x = app.globalVar;
});
我认为这很糟糕,但我想知道,从技术角度来看,为什么这是错误的,以及在AngularJS中如何正确使用“全局”变量
我读过关于使用$rootScope的内容,还读到在2.0版上AngularJS正在删除$scope altogheter,所以可能唯一的方法是使用服务/工厂?通常我不使用全局变量。它们会污染窗口范围,并使代码更加混乱。对于您给出的示例,我建议使用工厂或服务来持久化数据。然后,您可以将它清楚地注入到您想要的任何控制器/直接/其他服务中。虽然你的同事说有很多方法可以做,但我不建议你污染全球范围
app.
module('myApp')
.factory('myFactory', myFactory);
function myFactory() {
var globalVar = [23,43,21];
return {
get: function() {
return globalVar;
}
}
}
然后在你的控制器里(或其他什么)
一般来说,我不使用全局变量。它们会污染窗口范围,并使代码更加混乱。对于您给出的示例,我建议使用工厂或服务来持久化数据。然后,您可以将它清楚地注入到您想要的任何控制器/直接/其他服务中。虽然你的同事说有很多方法可以做,但我不建议你污染全球范围
app.
module('myApp')
.factory('myFactory', myFactory);
function myFactory() {
var globalVar = [23,43,21];
return {
get: function() {
return globalVar;
}
}
}
然后在你的控制器里(或其他什么)
下面是我在设计时遵循的一些惯例 a全局变量-将变量附加到
$rootscope
,然后您可以在任何子$scope
中使用该变量。此外,您甚至可以跨控制器侦听rootscope上的事件提示:避免这种情况,因为在rootscope
和侦听器
上可能会出现过多的变量
b角度服务-当您希望在两个或多个控制器之间共享数据时,请使用此选项。这是访问/共享数据的最佳方式
c角度工厂-非常类似于服务,但使用它来存储静态数据,如基本URL、api键、视图之间的按钮状态等
d角度控制器-尽量使控制器的编码和业务逻辑最少。仅在控制器中进行路由和基本绑定
我希望这对你的论点有所帮助 下面是我在设计时遵循的一些惯例 a全局变量-将变量附加到
$rootscope
,然后您可以在任何子$scope
中使用该变量。此外,您甚至可以跨控制器侦听rootscope上的事件提示:避免这种情况,因为在rootscope
和侦听器
上可能会出现过多的变量
b角度服务-当您希望在两个或多个控制器之间共享数据时,请使用此选项。这是访问/共享数据的最佳方式
c角度工厂-非常类似于服务,但使用它来存储静态数据,如基本URL、api键、视图之间的按钮状态等
d角度控制器-尽量使控制器的编码和业务逻辑最少。仅在控制器中进行路由和基本绑定
我希望这对你的论点有所帮助 使用全局变量的好方法 角度服务:
(function () {
var userService = function () {
var getGlobalVar = function () {
var globalVar = [23, 43, 21];
};
return {
globalVar: globalVar
};
};
var mod = angular.module("myApp");
mod.factory("userService", userService);
}());
app.controller("MyCtrl",['userService' function (userService) {
var test = userService.getGlobalVar();
}]);
角度控制器:
(function () {
var userService = function () {
var getGlobalVar = function () {
var globalVar = [23, 43, 21];
};
return {
globalVar: globalVar
};
};
var mod = angular.module("myApp");
mod.factory("userService", userService);
}());
app.controller("MyCtrl",['userService' function (userService) {
var test = userService.getGlobalVar();
}]);
使用全局变量的好方法 角度服务:
(function () {
var userService = function () {
var getGlobalVar = function () {
var globalVar = [23, 43, 21];
};
return {
globalVar: globalVar
};
};
var mod = angular.module("myApp");
mod.factory("userService", userService);
}());
app.controller("MyCtrl",['userService' function (userService) {
var test = userService.getGlobalVar();
}]);
角度控制器:
(function () {
var userService = function () {
var getGlobalVar = function () {
var globalVar = [23, 43, 21];
};
return {
globalVar: globalVar
};
};
var mod = angular.module("myApp");
mod.factory("userService", userService);
}());
app.controller("MyCtrl",['userService' function (userService) {
var test = userService.getGlobalVar();
}]);
这个全局变量是什么?在哪里使用?值更改的频率是多少?…只是一个随机变量,用于保存数据以供以后使用,没有什么特别的。例如,它可以是
var myArray=[]
,然后它将作为哑变量在各种函数上使用,在这些函数中不断更改值。因此有了一个论点,这个全局变量是什么?在哪里使用?值更改的频率是多少?…只是一个随机变量,用于保存数据以供以后使用,没有什么特别的。例如,它可以是var myArray=[]
,然后它将作为哑变量在各种函数上使用,在这些函数中不断更改值。因此,当您希望变量支持$watch并在ng模型或任何其他方式中使用它们时,您会怎么做?我认为使用$rootscopeThank@DannyBlue很好,我知道有些地方不对劲,你对全局范围的评论为我和同事的争论增添了一些积极的见解。是的@Ahmad,我想是的,谢谢你的反馈。当你想要支持$watch的变量并以ng模型或其他方式使用它们时,你会怎么做?我认为使用$rootscopeThank@DannyBlue很好,我知道有些地方不对劲,你对全球范围的评论为我与同事的争论增添了一些积极的见解。是的@Ahmad,我想是的,谢谢你的反馈。谢谢你分享这个,有意义。谢谢你分享这个,有意义。