Объект Getter и Setter Model в Angular 4

Как я могу заставить getter и setter работать в моем классе модели?

Моя цель - вычислить целочисленное значение выбранного дня при вводе, содержащее дату, обновленную. Я собирался сделать это в сеттер, но Angular 4 игнорирует setter и getter моей модели.

Мой класс модели:

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

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

Мой шаблон:

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

Но getter и setter не работают. Что мне не хватает?

Ответ 1

Способ объявления свойства даты как ввода выглядит некорректно, но трудно сказать, является ли это единственной проблемой, не видя всего вашего кода. Вместо использования @Input('date') объявите свойство date следующим образом: private _date: string;. Кроме того, убедитесь, что вы создаете модель с помощью ключевого слова new. Наконец, обращайтесь к свойству с помощью регулярной точечной нотации.

Проверьте свою работу с этим примером с 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);
}

И вот плункер, демонстрирующий, как это звучит, как вы пытаетесь сделать: https://plnkr.co/edit/OUoD5J1lfO6bIeME9N0F?p=preview