我希望为注入特定服务的每个函数运行相同的代码行。例如:
app.service('sameInitService', function ($rootScope) {
this.init = function (scope) {
scope.foo = $rootScope.foo;
}
});
app.controller('oneController', function ($scope, sameInitService) {
sameInitService.init($scope); // <- This line of code
});
app.controller('twoController', function ($scope, sameInitService) {
sameInitService.init($scope); // <- Is the same
});
是否有一种角度方法可以避免在注入此服务时编写相同的代码行?
答案 0 :(得分:0)
可以通过装饰$ controller服务来完成,但在这种情况下,所有控制器都将以这种方式初始化。
> tabular(id ~ (description*Heading()*unique)+Heading()*which*(p + padjust + metal + perc + sig)*Heading()*identity, data = test_table)
compress
id description p padjust metal perc sig
GO:0005525 GTP binding 6.514e-09 9.063e-07 ca 0 TRUE
GO:0005634 nucleus 1.000e+00 1.000e+00 ca 0 FALSE
GO:0008270 zinc ion binding 1.000e+00 1.000e+00 ca 0 FALSE
GO:0019001 guanyl nucleotide binding 2.320e-10 3.919e-08 ca 0 TRUE
GO:0046914 transition metal ion binding 1.000e+00 1.000e+00 ca 0 FALSE
normal
p padjust metal perc sig
1.000e+00 1.000e+00 mg 0.8756 FALSE
4.922e-05 1.663e-02 zn 0.8417 TRUE
1.082e-21 8.526e-19 zn 0.8318 TRUE
1.000e+00 1.000e+00 mg 0.8767 FALSE
2.060e-14 1.218e-11 zn 0.5193 TRUE
请参阅jsfiddle here。
答案 1 :(得分:0)
我想扩展@janusz的答案,并提供我实际上最终使用的代码,它只对注入依赖关系的控制器进行&#34;应用行为&#34;:
angular.module('App').decorator('$controller', function ($delegate, sameInitService) {
return function (constructor, locals) {
var controller = $delegate.apply(null, arguments);
return angular.extend(function () {
var controllerInstance = controller()
var DIList = controllerInstance .__proto__.constructor.$inject;
console.log(DIList);
if (DIList.indexOf('sameInitService') !== -1) {
sameInitService.init(locals.$scope);
}
return controllerInstance;
}, controller);
};
});
以下是修改后的fiddle