2017-06-12 12 views
5

Jak ustawić narzędzie getter i setter w mojej klasie modelu?Narzędzie Getter and Setter obiektu modelu w Angular 4

Moim celem jest obliczenie wartości całkowitej wybranego dnia, gdy wprowadzono dane wejściowe zawierające datę. Miałem zamiar to zrobić w ustawiaczu, ale Angular 4 ignoruje seter i getter mojego modelu.

Moja klasa model:

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

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

Mój szablon:

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

Ale getter i setter nie działają. czego mi brakuje?

+3

składnia '@Input ('data ")' jest tylko dla właściwości zagnieżdżonych komponentów. Dekorator nie należy do właściwości klasy modelu. – DeborahK

+0

Czy możesz również pokazać swój kod dla klasy komponentu i jak on korzysta z tej klasy modelu? – DeborahK

+0

@DeborahK, jeśli przekazujemy dane do komponentu zagnieżdżonego z usługi. są Inputs jedyny sposób z getterami? – Winnemucca

Odpowiedz

8

Sposób deklarowania właściwości daty jako danych wejściowych wygląda niepoprawnie, ale trudno powiedzieć, czy jest to jedyny problem, nie widząc całego kodu. Zamiast używać wartości @Input('date') zadeklaruj właściwość date, jak na przykład: private _date: string;. Upewnij się również, że tworzysz instancję modelu ze słowem kluczowym new. Wreszcie, dostęp do nieruchomości za pomocą regularnej notacji kropkowej.

Sprawdź swoją pracę przed tym przykładzie z 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); 
} 

A oto plunker demonstrując to, co brzmi jak próbujesz zrobić: https://plnkr.co/edit/OUoD5J1lfO6bIeME9N0F?p=preview

Powiązane problemy