2015-12-16 2 views
5

Самая большая проблема с Angular 1 заключается в том, насколько сложно расширить (в объектно-ориентированном смысле) директиву.Угловые 2 директивы теперь «расширяемы»?

Например, практически невозможно повторно использовать директиву input[number] для моего пользовательского виджета, и мне пришлось повторно реализовать весь код проверки и преобразования типа.

Угловые 2 компоненты реализованы в виде классов, поэтому кажется, что их можно легко расширить. Тем не менее, они также имеют аннотацию @Component с очень специфическими селекторами и т. Д., Что делает ее неясной для меня, если они могут быть полностью переопределены.

Так же существуют угловые 2 директивы на самом деле расширяемые?

Edit:

Хорошо, "расширяемый" не должны быть расширения классов. Он может создавать новую директиву, состоящую из нескольких существующих директив. Мой вопрос с таким подходом заключается в том, каков механизм применения дочерних директив?

(The @Component классы не являются традиционными классами OO с методами, которые можно направить в детей. Это всего лишь контейнер полей и обратных вызовов, которые полностью движимый все, что за аннотацией.)

ответ

5

Аннотации не по наследству, так что если у вас есть:

@Directive({ 
    selector:'foo', 
    inputs:['bar'] 
}) 
export class Foo {} 


//no annotation 
export class FooBar extends Foo {} //not a directive 


@Directive({ 
    selector:'foobaz' 
}) 
export class FooBaz extends Foo {} //is a directive, but has no inputs 

FooBar не будет признан в качестве директивы на всех, и FooBaz будет, но не будет ли bar вход (или любые другие). Итак, , если наследование действительно, что имеет наибольший смысл для вашего прецедента, путь к этому будет заключаться в объявлении ввода и т. Д. В аннотациях дочернего класса и передаче их в качестве аргументов конструктора родительскому классу, где вы можете инкапсулировать общую функциональность.

Это не означает, что расширяемость обязательно подразумевает наследование, и, по моему опыту, старая пословица «одобряет композицию над наследованием» вдвойне истинна, когда речь идет о DI.

Кто-то гораздо умнее меня недавно сказал: «Наследование будет убивать ваших детей во сне», и я склонен придерживаться этой точки зрения, если я не уверен, что это правильный инструмент для моего случая использования.

+1

Привет, я полностью согласен с вами в отношении «композиции предпочтения по наследству», но это не так просто с Угловыми компонентами. См. Мое редактирование выше. –