服务与控制器与外部JS将常用方法放在AngularJS中
service vs controller vs external js to put frequently used methods in angularjs
我有一个angularjs应用程序,它有几个控制器和几个视图。当我开始编写应用程序时,很少有方法(类似类型(,它们在多个地方使用,最初对我来说,将这些方法放在需要的地方(两个或三个控制器(看起来还可以。但随着我的应用程序的增长,我开始注意到代码冗余问题,因为更多地方需要该方法。这绝对是我缺乏导致这个问题的经验。
现在我决定从我的应用程序中删除这些冗余代码。我找到了以下选项:
- 服务
方式:删除多余的代码并将其放入新服务中,并将服务包含在我需要该功能的所有位置。
外部JS:将冗余代码放在外部js文件中,只需调用所需的方法即可。
保持代码不变。
但是在这里我想提一下,我所说的冗余代码不是很紧密耦合,可以毫不费力地在任何地方添加和删除。
现在,我想知道的是上述选项,我应该选择哪一个?或者这个问题是否有更好的选择(可能由 angularJS 本身提供(。
编辑 代码的基本示例:如我所说
$scope.showSomething = function (show, ele) {
//show or hide the ele (element) based on value of show
}
您正在使用角度,因此您肯定希望根据MVC构建应用程序。 如果您的代码像任何东西一样放在 JS 文件中的任何位置,您的应用程序将遵循什么样的 MVC 模式。我建议将代码放在服务中。这就是减少冗余的角度方法。此外,您还可以选择在此处将功能设置为$rootscope
我不确定您的情况,但我也有类似的情况:我有许多提供验证功能的函数。我创建了服务:
'use strict';
angular.module('myApp')
.factory('UtilService', ['Env', 'IBANChecker', function(Env, IBANChecker) {
var validateCallbacks = {
checkAddress: function (address) {
return address.action != 'delete';
},
validateIBAN: function (iban) {
return !iban || IBANChecker.isValid(iban);
},
.....
validateYCode: function(id) {
return YCodeChecker.isValid(id);
}
};
return {
/**
* Factory with callbacks for 'validate' directive.
* 0 arguments -- get all callbacks, over wise see @validateCallbacks object to get specific callbacks.
* if wrong callback name requested -> it will be ignored
* @returns {object} -- call requested callbacks.
*/
getValidateCallbacks : function() {
if(arguments.length) {
var result = {};
_.each(arguments, function(argument){
if(validateCallbacks[argument]) {
result[argument] = validateCallbacks[argument];
}
});
return result;
} else {
return validateCallbacks;
}
}
};
}]);
控制器中的代码如下所示:
var validateCallbacks = UtilService.getValidateCallbacks('validateText', 'validateNumber');
_.each(validateCallbacks, function(callback, key) {
$scope[key] = callback;
});
我倾向于使用工厂,特别是因为工厂可以依赖于其他工厂,并且可以定义逻辑模块。考虑下面的伪代码。
.controller('HisController', function (UtilityService) {
$scope.foo = UtilityService.foo;
})
.controller('HerController', function (UtilityService) {
$scope.foo = UtilityService.foo;
})
.factory('UtilityService', function (SomeOtherService) {
var service = {
foo: foo,
bar: bar,
}
return service
///////
function foo(a) {
return a.substring(0,1);
}
function bar(a) {
return SomeOtherService.doStuff(service.foo(a));
}
})
相关文章:
- AngularJS:$q.dedefe()不能由工厂方法共享
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 如何在所有ng点击事件AngularJS上启动一个方法
- 在angularjs中创建自定义控件的推荐方法
- Atom.io中AngularJS的方法完成
- 从AngularJs获取谷歌地图对象的正确方法是什么
- 修复AngularJS错误:提供程序必须从$get工厂方法返回值
- AngularJS从对象中获取另一个值的方法
- 在angularjs中将html项插入到现有模板HTML中有什么奇怪的方法
- 胸腺价值发送angularJS ng onclick方法
- angularjs post方法中得到405错误
- AngularJS在页面重定向上执行控制器方法
- 将php表转换为angularjs javascript方法
- AngularJs在调用服务方法后更新指令
- 拾取复选框如何在后方法angularjs中产生
- 在 ajax 响应中调用应用程序配置方法 - AngularJS
- 从另一个控制器中的指令内部定义的一个控制器调用方法:AngularJS
- 用JavaScript替换ngGrid中的一行'splice'方法- angularjs, ngrid
- 更好的监听变化的方法——AngularJS
- 解决方法AngularJS DOM异常