gpt4 book ai didi

Angular 2,@Input getter/setter

转载 作者:太空狗 更新时间:2023-10-29 17:32:30 25 4
gpt4 key购买 nike

我在一个 Angular 项目中工作,我们也使用 angularjs 组件。

我想使用 getter 和 setter 而不是使用 @input 变量,但遇到了以下问题。我很好奇如何做,但我发现很难找到这方面的信息。

这行得通

<foobar [(model)]="model"></foobar>

TS CODE:
@Input() set model(value: any) {
this._model= value;
console.log('I am here:', value);
}
get model() {
return this._model;
}

这不是

<foobar [(abc)]="model"></foobar>

TS CODE:
@Input('abc') set model(value: any) {
this._model= value;
console.log('I am here:', value);
}
get model() {
return this._model;
}

你能解释一下为什么吗?

谢谢

最佳答案

也许在第二个版本中你缺少双向绑定(bind)工作的事件发射器。

你需要添加abcChange

请看一下这里的演示 - 它工作正常:

import {Component, NgModule, VERSION, Input, Output, EventEmitter} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {FormsModule} from '@angular/forms';


@Component({
selector: 'tpc-ts',
template: `
<input [(ngModel)]="model">
<div>{{model}}</div>
`
})
export class TsComponent {
_model: string;

@Output()
valueChange: EventEmitter<string> = new EventEmitter<string>();

@Input('value')
set model(value: string) {
this._model = value;
this.valueChange.emit(this._model);
}

get model() {
return this._model;
}
}

@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
<tpc-ts [(value)]="name"></tpc-ts>
</div>
`,
})
export class App {
name:string;
constructor() {
this.name = `Angular! v${VERSION.full}`
}
}

@NgModule({
imports: [ BrowserModule, FormsModule ],
declarations: [ App, TsComponent ],
bootstrap: [ App ]
})
export class AppModule {}

在线演示:http://plnkr.co/edit/y9GVu7?p=preview

关于 Angular 2,@Input getter/setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43804416/

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