【发布时间】:2018-06-19 12:56:56
【问题描述】:
我正在尝试使用debounce 创建自定义输入组件,所以我关注了this suggestion
Debounce 有效,但一开始输入值未正确设置为输入组件。
我是这样实现的:
app.component.ts
import { Component } from '@angular/core';
import { DebInputComponent } from './deb-input/deb-input.component';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
test:string ='test';
}
app.component.html
<deb-input [(ngModel)]="test" type="text" label="Test" ngDefaultControl>
</deb-input>
<div>{{test}}</div>
deb-input.component.ts
import { Observable, Subject } from 'rxjs';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
import { Component, Input } from '@angular/core';
@Component({
selector: 'deb-input',
templateUrl: './deb-input.component.html',
styleUrls: ['./deb-input.component.css'],
providers: []
})
export class DebInputComponent {
@Input() label: string;
@Input() type: string="text";
@Input() model: string;
modelChanged: Subject<string> = new Subject<string>();
constructor() {
this.modelChanged
.pipe(debounceTime(1000))
.pipe(distinctUntilChanged())
.subscribe(newValue => {this.model = newValue;
console.log(this.model)});
}
changed(text: string) {
this.modelChanged.next(text);
}
}
deb-input.component.html
<div>
<span>{{label}}</span>
<input [(ngModel)]='model' (ngModelChange)='changed($event)' [type]='type' ngDefaultControl/>
</div>
如何确保deb-input 中的model 正确设置为“测试”?
【问题讨论】:
-
如果你想实现自定义表单控制,你应该使用 ControlValueAccessor - angular.io/api/forms/ControlValueAccessor.. 这是推荐的方式
标签: javascript angular typescript angular5 angular6