gpt4 book ai didi

javascript - Angular 6 正确初始化自定义输入组件

转载 作者:行者123 更新时间:2023-11-30 14:32:40 25 4
gpt4 key购买 nike

我试图用 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 正确设置为“test”?

最佳答案

您正在使用 ngmodel 而您应该使用组件输入的名称

<deb-input [model]="test" type="text" label="Test" ngDefaultControl>
</deb-input>

编辑

如果你想为你的组件进行双向绑定(bind),只需将 eventEmitter 添加到你的组件中,如下所示:

@Input() model: string;
@Output() modelChange = new EventEmitter<string>();
modelChanged: Subject<string> = new Subject<string>();
@Output() modelChangeEvt = new EventEmitter<string>();

constructor() {
this.modelChanged
.pipe(debounceTime(1000))
.pipe(distinctUntilChanged())
.subscribe(newValue => {this.model = newValue;
this.modelChangeEvt.emit(newValue);
console.log(this.model)});
}

然后在 HTML 中使用 2 方式绑定(bind):

<deb-input [(model)]="test" type="text" label="Test" ngDefaultControl></deb-input>

关于javascript - Angular 6 正确初始化自定义输入组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50929043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com