Я стараюсь, чтобы мой угловой проект был как можно более модульным. В настоящее время у меня есть 3 вложенных директивы, которые составляют основу моего проекта.Унаследованные директивы в угловом
В самой нижней директиве всегда будут одинаковые функциональные возможности ядра и объекты области видимости, но в зависимости от варианта использования потребуются дополнительные объекты и функции области видимости. Приложение очень велико, поэтому важно, чтобы все как можно более развязанное было важно, а также следовать принципу DRY.
В OOP в стиле python я бы просто наследовал все свойства и функции, а затем добавил к ним. Есть что-то подобное в Angular?
Для примера:
Основания
myApp.directive('itemOption', function() {
return {
restrict: 'E',
templateUrl: "item_option.html",
scope: {
'lowest': '=',
'middle': '=',
'high': '=',
'ngModel': '=',
},
controller: function ($scope) {
$scope.prop1 = "Default 1"
$scope.prop2 = "Default 2"
}
}
}
повторяющейся директивы, которая будет использоваться вместо основания
myApp.directive('itemOptionVariation1', function() {
return {
restrict: 'E',
templateUrl: "item_option.html",
scope: {
'lowest': '=',
'middle': '=',
'high': '=',
'ngModel': '=',
},
controller: function ($scope) {
$scope.prop1 = "Default 1"
$scope.prop2 = "Default 2"
// Unique to this directive
$scope.prop900 = "Penguins"
}
}
}
И Другого
myApp.directive('itemOptionVariation2', function() {
return {
restrict: 'E',
templateUrl: "item_option.html",
scope: {
'lowest': '=',
'middle': '=',
'high': '=',
'ngModel': '=',
},
controller: function ($scope) {
$scope.prop1 = "Default 1"
$scope.prop2 = "Default 2"
// Unique to this directive
$scope.prop3 = "This is awesome"
}
}
}
Я вижу, что это хорошее решение. Можете ли вы объяснить, что вы подразумеваете под композицией, а не наследованием? Я знаю, что это решает проблему, я просто испытываю проблемы, всегда видя, почему. – Kazanz
Это мое понимание, а не наследование на Java, в Angular вы должны определить унаследованные свойства и контроллеры. Обратитесь к этому разговору и плункеру, который дает более подробную информацию о реализации. http://plnkr.co/edit/djNk8PPzXvngZOvAirMu?p=preview http://stackoverflow.com/questions/19111696/scope-inheritance-for-angular-directives – Aviro
Спасибо @Aviro. Вот мое решение, наследующее контроллеры вне директивы. https://gist.github.com/Kazanz/379c1dd5507d15ec7977 – Kazanz