2016-02-20 2 views
9

В Angular 1 мы можем сделать требуемый атрибут. Как мы это делаем в Angular 2 с @Input? Документы не упоминают об этом.Угловой 2 make @Input по директиве требуется

Например.

Component({ 
    selector: 'my-dir', 
    template: '<div></div>' 
}) 
export class MyComponent { 
    @Input() a:number; // Make this a required attribute. Throw an exception if it doesnt exist 
    @Input() b:number; 

    constructor(){ 

    } 
} 

ответ

19

Проверить в ngOnInit() (входы еще не установлен, когда конструктор выполняется), имеет ли значение атрибута.

Component({ 
    selector: 'my-dir', 
    template: '<div></div>' 
}) 
export class MyComponent { 
    @Input() a:number; // Make this a required attribute. Throw an exception if it doesnt exist 
    @Input() b:number; 

    constructor(){ 

    } 

    ngOnInit() { 
     if(null == a) throw new Error("Attribute 'a' is required"); 
    } 
} 

Вы также можете проверить в ngOnChanges(changes) {...}, если значения не установлены null. Смотрите также https://angular.io/docs/ts/latest/api/core/OnChanges-interface.html

+0

Вы могли бы также хочу проверить на неопределенное и дать конкретное сообщение об ошибке для этого ... если значение передано атрибутом и оно ошибочно написано или не определено по какой-либо другой причине, это будет привлекать внимание к этому факту быстрее, что упростит его для отладки. – jpoveda

+0

спасибо, но нет механизма для обеспечения, предусмотренного каркасом, правильно? –

+0

Исправить, в настоящее время нет поддержки фреймов. –

4

Вы можете сделать это следующим образом:

constructor() {} 
ngOnInit() { 
    if (!this.a) throw new Error(); 
} 
2

Для меня, я должен был сделать это следующим образом:

ngOnInit() { if(!this.hasOwnProperty('a') throw new Error("Attribute 'a' is required"); }

FYI, если вы хотите, чтобы требовать указания @output, то попробуйте следующее:

export class MyComponent { 
    @Output() myEvent = new EventEmitter(); // This a required event 

    ngOnInit() { 
     if(this.myEvent.observers.length === 0) throw new Error("Event 'myEvent' is required"); 
    } 
} 
Смежные вопросы