У меня есть настраиваемый компонент выбора, который устанавливает модель при нажатии на элемент li
, но поскольку я вручную вызываю this.modelChange.next(this.model)
каждый раз, когда я меняю модель, это довольно грязно и повторяемо, чего я хочу избежать.
Итак, мой вопрос: если что-то похожее на $scope.$watch
, где я могу посмотреть, меняется ли значение, а затем вызывает this.modelChange.next(this.model)
каждый раз, когда это происходит.
Я читал о Observables
, но я не могу понять, как это предполагается использовать только для простого значения, поскольку все примеры, которые я вижу, связаны с асинхронными запросами к внешним api: s.
Неужели должен быть более простой способ достичь этого?
(Не то, что я не могу использовать ngModelChanges
, так как на самом деле я не использую для этого ввод).
import {Component, Input, Output, EventEmitter, OnInit, OnChanges} from 'angular2/core';
@Component({
selector: 'form-select',
templateUrl: './app/assets/scripts/modules/form-controls/form-select/form-select.component.html',
styleUrls: ['./app/assets/scripts/modules/form-controls/form-select/form-select.component.css'],
inputs: [
'options',
'callback',
'model',
'label'
]
})
export class FormSelectComponent implements OnInit, OnChanges {
@Input() model: any;
@Output() modelChange: EventEmitter = new EventEmitter();
public isOpen: boolean = false;
ngOnInit() {
if (!this.model) {
this.model = {};
}
for (var option of this.options) {
if (option.model == (this.model.model || this.model)) {
this.model = option;
}
}
}
ngOnChanges(changes: {[model: any]: SimpleChange}) {
console.log(changes);
this.modelChange.next(changes['model'].currentValue);
}
toggle() {
this.isOpen = !this.isOpen;
}
close() {
this.isOpen = false;
}
select(option, callback) {
this.model = option;
this.close();
callback ? callback() : false;
}
isSelected(option) {
return option.model === this.model.model;
}
}
Изменить: Я попытался использовать ngOnChanges
(см. обновленный код выше), но он запускается только один раз при инициализации, тогда он не обнаруживает изменений. Что-то не так?