angular.js - angularJS依赖注入的标准
本文介绍了angular.js - angularJS依赖注入的标准的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我在使用各大社区查关于angular的知识的时候,经常看到两种依赖注入的模式,有的是controller.('Ctr',[$scope,function($scope){...}]);
有的直接是controller.('Ctr',function($scope){...});
想请教一下后面这个是新的模式而且通用的吗?
解决方案
最佳实践是用:controller.('Ctr',['$scope',function($scope){...}])。
如@Deboy所说,为了js压缩。
性能更优。(controller.('Ctr',function($scope){...})的写法,angularjs会解析这个function的参数,最终得到要注入的内容,而数组式的写法能跳过解析这一步,性能上会更好)。附上源码供参考:
function annotate(fn, strictDi, name) {
var $inject,
fnText,
argDecl,
last;
if (typeof fn === 'function') {
if (!($inject = fn.$inject)) {
$inject = [];
if (fn.length) {
if (strictDi) {
if (!isString(name) || !name) {
name = fn.name || anonFn(fn);
}
throw $injectorMinErr('strictdi',
'{0} is not using explicit annotation and cannot be invoked in strict mode', name);
}
fnText = fn.toString().replace(STRIP_COMMENTS, '');
argDecl = fnText.match(FN_ARGS);
forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
arg.replace(FN_ARG, function(all, underscore, name) {
$inject.push(name);
});
});
}
fn.$inject = $inject;
}
} else if (isArray(fn)) {
last = fn.length - 1;
assertArgFn(fn[last], 'fn');
$inject = fn.slice(0, last);
} else {
assertArgFn(fn, 'fn', true);
}
return $inject;
}
这篇关于angular.js - angularJS依赖注入的标准的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文