Я хочу написать директиву Angular 2, которая должна иметь следующее поведение:
Должен использоваться с оберткой и без нее
<form [ngFormModel]="form">
Следует использовать
[(ngModel)]
для привязки данныхИспользуйте
Observer
для внутреннего использования, который обновляетngModel
через 250 мс после последнего пользовательского ввода.При использовании обертки
<form [ngFormModel]="form">
должна быть возможность прослушиватьform.valueChanges
(что, конечно, должно срабатывать через 250 мс после последнего пользовательского ввода)
Я написал следующую директиву для тестирования:
import {Directive, EventEmitter, Input, Output} from 'angular2/core'
import {NgModel} from 'angular2/common'
import {Observable} from 'rxjs/Observable'
@Directive({
selector: '[queryDirective]'
})
export class QueryDirective {
constructor(public model:NgModel) {}
ngOnInit() {
this.model.control.valueChanges
.debounceTime(250)
.subscribe(val => this.model.control.updateValue(val,{emitEvent:true}));
}
}
Это работает при использовании нет ngControl
. Затем он говорит, что поставщик для NgModel
не может быть найден.
<form [ngFormModel]="form">
<input queryDirective ngControl="..." type="text" [(ngModel)]="...">
</form>
Но когда я использую NgControl
в конструкторе, метод this.model.control.updateValue
не будет обновлять ngModel
.
Что я делаю не так? Или у кого-нибудь есть пример кода, который работает?
Заранее спасибо!