2017-06-12 39 views
5

Làm thế nào tôi có thể làm cho getter và setter làm việc trong lớp mô hình của tôi?Getter và Setter của đối tượng Model trong Angular 4

Mục tiêu của tôi là tính toán giá trị số nguyên của ngày đã chọn khi nhập, chứa ngày, được cập nhật. Tôi sẽ làm điều đó trong setter, nhưng Angular 4 bỏ qua setter và getter của mô hình của tôi.

Mô hình của tôi lớp:

export class MyModel { 
    @Input('date') 
    get date(): String { 
     console.log('Getting date'); 
     ... 
    } 

    set date(val) { 
     console.log('Setting date: ' + val); 
     ... 
    } 
} 

mẫu của tôi:

... 
<input class="form-control" name="dp" [(ngModel)]="model.date"> 
... 

Nhưng getter và setter không làm việc. Tôi đang thiếu gì?

+3

Cú pháp này '@Input (' ngày ') 'chỉ dành cho các thuộc tính của các thành phần lồng nhau. Trình trang trí không thuộc về thuộc tính lớp mô hình. – DeborahK

+0

Bạn cũng có thể hiển thị mã của bạn cho lớp thành phần của bạn và cách nó đang sử dụng lớp mô hình này không? – DeborahK

+0

@DeborahK nếu chúng tôi chuyển dữ liệu đến thành phần lồng nhau từ một dịch vụ. đầu vào là cách duy nhất với getters? – Winnemucca

Trả lời

8

Cách bạn khai báo thuộc tính ngày làm đầu vào có vẻ không đúng nhưng thật khó để nói rằng đó là vấn đề duy nhất mà không nhìn thấy tất cả mã của bạn. Thay vì sử dụng @Input('date') khai báo thuộc tính ngày như sau: private _date: string;. Ngoài ra, hãy đảm bảo bạn đang tạo mô hình bằng từ khóa new. Cuối cùng, truy cập thuộc tính bằng ký hiệu dấu chấm thường.

Kiểm tra công việc của bạn chống lại ví dụ này từ https://www.typescriptlang.org/docs/handbook/classes.html:

let passcode = "secret passcode"; 

class Employee { 
    private _fullName: string; 

    get fullName(): string { 
     return this._fullName; 
    } 

    set fullName(newName: string) { 
     if (passcode && passcode == "secret passcode") { 
      this._fullName = newName; 
     } 
     else { 
      console.log("Error: Unauthorized update of employee!"); 
     } 
    } 
} 

let employee = new Employee(); 
employee.fullName = "Bob Smith"; 
if (employee.fullName) { 
    console.log(employee.fullName); 
} 

Và đây là một plunker chứng minh những gì có vẻ như bạn đang cố gắng để làm: https://plnkr.co/edit/OUoD5J1lfO6bIeME9N0F?p=preview

Các vấn đề liên quan