2016-02-20 38 views
9

Trong Góc 1 chúng ta có thể tạo một thuộc tính chỉ thị được yêu cầu. Làm thế nào để chúng ta làm điều đó trong Angular 2 với @Input? Các tài liệu không đề cập đến nó.Góc 2 làm cho @Input trên chỉ thị bắt buộc

Ví dụ:

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(){ 

    } 
} 

Trả lời

19

Kiểm tra trong ngOnInit() (đầu vào chưa được thiết lập khi các nhà xây dựng được thực hiện) dù thuộc tính có giá trị.

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"); 
    } 
} 

Bạn cũng có thể kiểm tra trong ngOnChanges(changes) {...} nếu các giá trị đã không được đặt để null. Xem thêm https://angular.io/docs/ts/latest/api/core/OnChanges-interface.html

+0

Bạn có thể đặt cũng muốn kiểm tra không xác định và đưa ra thông báo lỗi cụ thể cho ... nếu giá trị được chuyển bởi thuộc tính và sai chính tả hoặc không xác định vì một số lý do khác, điều này sẽ chú ý đến thực tế đó nhanh hơn, điều này sẽ giúp bạn dễ dàng hơn tìm lỗi. – jpoveda

+0

cảm ơn, nhưng không có cơ chế nào được cung cấp bởi khung công tác, đúng không? –

+0

Đúng, hiện không có hỗ trợ khung. –

4

Bạn có thể làm điều đó như thế này:

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

Đối với tôi, tôi phải làm điều đó theo cách này:

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

FYI, Nếu bạn muốn yêu cầu chỉ thị @Output, sau đó thử này:

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"); 
    } 
} 
Các vấn đề liên quan