Angular - 在 html 调用 setters/getters
Angular - call setters/getters in html
我在 .ts 文件中有以下代码:
set query(query: string) {
this.form.get('query').setValue(query);
}
get query() {
return this.form.controls.query;
}
我正在尝试调用 .html 文件中的 getter 方法:
<div *ngIf="!query.valid && (query?.dirty || query?.touched)">
<div [hidden]="!query.errors.required">Query is required</div>
</div>
但是,抛出了一个错误。如果我从 .ts 文件中删除 setter,代码将完美运行。
为什么会这样?
尝试form.getControls['query'].setValue(myValue)
form.get('fieldName') 将获取该字段的值...
form.controls['fieldName'] 将获取字段本身。字段控件将公开获取或设置值方法
您可以通过两种方式完成,
方式一:
set query(query: any) {
this.form.get('query').setValue(query);
}
get query() {
return this.form.controls.query;
}
方式二:
set query(query: string) {
this.form.get('query').setValue(query);
}
get query(): AbstractControl {
return this.form.controls.query;
}
当您为 query
赋值时,您将其作为字符串赋值,请参阅 setter 中的传入参数类型。所以默认情况下 angular 将其理解为字符串类型。然后在您的 HTML 中,您尝试将它作为一个对象来访问,这给 angular 带来了问题,因为它希望它是一个字符串,但却被用作一个对象。
虽然接受的答案有效并且其背后的想法是有道理的,但我会完全避免使用 any 作为 return 类型,当你确切地知道你的正在 returning.
这与使用 Typescript 作为语言的目的背道而驰。使用 any 等同于说 “接受所有内容,而不只是将其解释为字符串”.
set query(query: string) {
this.form.get('query').setValue(query);
}
get query(): AbstractControl {
return this.form.controls.query;
}
因为您知道您正在 returning AbstractControl,我会将 return 类型设置为 AbstractControl 或者,如果你想更具体一点,到 FormControl.
我在 .ts 文件中有以下代码:
set query(query: string) {
this.form.get('query').setValue(query);
}
get query() {
return this.form.controls.query;
}
我正在尝试调用 .html 文件中的 getter 方法:
<div *ngIf="!query.valid && (query?.dirty || query?.touched)">
<div [hidden]="!query.errors.required">Query is required</div>
</div>
但是,抛出了一个错误。如果我从 .ts 文件中删除 setter,代码将完美运行。
为什么会这样?
尝试form.getControls['query'].setValue(myValue)
form.get('fieldName') 将获取该字段的值... form.controls['fieldName'] 将获取字段本身。字段控件将公开获取或设置值方法
您可以通过两种方式完成,
方式一:
set query(query: any) {
this.form.get('query').setValue(query);
}
get query() {
return this.form.controls.query;
}
方式二:
set query(query: string) {
this.form.get('query').setValue(query);
}
get query(): AbstractControl {
return this.form.controls.query;
}
当您为 query
赋值时,您将其作为字符串赋值,请参阅 setter 中的传入参数类型。所以默认情况下 angular 将其理解为字符串类型。然后在您的 HTML 中,您尝试将它作为一个对象来访问,这给 angular 带来了问题,因为它希望它是一个字符串,但却被用作一个对象。
虽然接受的答案有效并且其背后的想法是有道理的,但我会完全避免使用 any 作为 return 类型,当你确切地知道你的正在 returning.
这与使用 Typescript 作为语言的目的背道而驰。使用 any 等同于说 “接受所有内容,而不只是将其解释为字符串”.
set query(query: string) {
this.form.get('query').setValue(query);
}
get query(): AbstractControl {
return this.form.controls.query;
}
因为您知道您正在 returning AbstractControl,我会将 return 类型设置为 AbstractControl 或者,如果你想更具体一点,到 FormControl.