Просто оставлю ссылку на комментарии, к которых хорошо описаны способы наследования и замещения директив. Особенно
Наследование #1
app.directive("MyDir1", function(){
return dir;
});
app.directive("MyDir2", function(MyDir1Directive){
var dir2 = angular.copy(MyDir1Directive);
//...
return dir2;
});
Наследование #2
myApp.directive('myDatepicker', function(datepickerDirective) {
"use strict";
return angular.extend({}, datepickerDirective, {
templateUrl: 'partitials/datepicker.html' // custom datepicker template
});
});
Наследование #3
myApp.directive('inputDefer', function($timeout) {
return {
requires: 'ngModel',
link: function(scope, elm, attrs, ngModelCtrl) {
var $setViewValue = ngModelCtrl.$setViewValue,
delay = attrs.inputDefer;
ngModelCtrl.$setViewValue = function() {
var args = arguments;
$timeout(function() {
ngModelCtrl.$setViewValue.apply(ngModelCtrl, args);
}, 500);
};
}
};
});
Замещение
app.config(function($provide){
$provide.decorator('someDirective', function($delegate) {
$delegate.restrict = 'E';
$delegate.controller.method1 = function(){};
$delegate.link = function(){};
return $delegate;
}
})
Наследование директив в Angular Light и другие «плюшки»
Недавно после прочтения одной статьи Армина Роначера, я подумал, что неплохо было бы иметь возможность наследовать директивы и вскоре реализовал это в
habrahabr.ru