假设我有一个指令:
.directive('money', ['Service', function (Service) {
/*
* Some code
*/
controller: ['$scope', '$element', '$attrs', '$parse', function (scope, cElement, attrs, $parse) {
scope.someValue=1;
scope.someFunction = function(){
console.writeline('money');
}
}
并且有第二个指令:
.directive('cash', ['Service', function (Service) {
/*
* Some code
*/
controller: ['$scope', '$element', '$attrs', '$parse', function (scope, cElement, attrs, $parse) {
scope.someValue=1;
scope.someFunction = function(){
console.writeline('cash');
}
}
正如您所看到的,这两个指令之间的区别仅在于一个函数的内容。
如此完美的方式将继承someFunction
甚至有可能在角度上制作这样的东西,或者我应该留下两个如此小的差异的指令?
答案 0 :(得分:1)
为什么不只有一个console
指令来抓取指令元素中属性的写入内容?
所以,而不是<div data-money></div>
和<div data-cash></div>
您有<div data-console text="money"></div>
和<div data-console text="cash"></div>
。
基本上,将不同的属性划分为可以带入更通用指令的属性。
根据评论,这个怎么样?将控制器创建为独立函数,然后在两个指令中使用相同的控制器。
在这一点上,我不确定它是否会为您节省很多(或任何)代码,并且对于这种重构可能有点过分。考虑到微小的差异,让它保持原样可能更有意义。
答案 1 :(得分:0)
是的,有继承选项,之前讨论过: AngularJS controller inheritance
编辑: 此外,您可以采用通用功能并通过注入服务进行共享,这些变体可以作为参数传递。