2017-06-12 12 views
5

Model sınıfımda nasıl getter ve ayarlayıcı yapabilirim?Model nesnesinin Toplayıcıda Oluşturucu ve Ayarlayıcısı

Amacım, seçili tarihi içeren giriş olduğunda seçilen günün tamsayı değerini hesaplamaktır. Ben setterde yapacaktım, ama Angular 4 modelimin elemesini ve setterini yok sayar.

Benim modelim sınıfı:

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

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

Benim şablonu:

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

Ama alıcı ve ayarlayıcı çalışmaz. Neyi kaçırıyorum?

+3

Bu sözdizimi '@Input ('tarih

https://www.typescriptlang.org/docs/handbook/classes.html şu örneğe karşı çalışmanızı kontrol ') 'sadece iç içe geçmiş bileşenlerin özellikleri içindir. Dekoratör, model sınıfına ait değildir. – DeborahK

+0

Ayrıca, kodunuzu bileşen sınıfınıza ve bu model sınıfını nasıl kullandığını gösterir misiniz? – DeborahK

+0

@DeborahK, verileri bir hizmetten iç içe geçmiş bir bileşene geçiriyorsa. Girişler, alıcılar ile tek yol mu? – Winnemucca

cevap

8

Tarih özelliğini bir girdi olarak bildirme biçiminiz yanlış görünüyor, ancak tüm kodunuzu görmeden tek sorun buysa söylemesi zor. @Input('date')'u kullanmak yerine, tarih özelliğini şu şekilde bildirin: private _date: string;. Ayrıca, modeli new anahtar kelimesiyle başlattığınızdan emin olun. Son olarak, normal nokta notasyonu kullanarak tesise erişin. Burada plunker bunu yapmaya çalışıyoruz ne gibi sesler sergiliyor

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

Ve: https://plnkr.co/edit/OUoD5J1lfO6bIeME9N0F?p=preview