组件输入参数接收为 "undefined" 但已指定值
Component input parameter is received as "undefined" but a value has been specified
我的 Angular 应用程序中有以下 TableMultipleEditComponent
:
export class TableMultipleEditComponent implements OnInit {
@Output() emitMultipleClose: EventEmitter<boolean> = new EventEmitter<
boolean
>();
@Output() emitHoverAndData: EventEmitter<any> = new EventEmitter<any>();
showBar: boolean;
@Input()
table: Table;
@Input()
checkedRows;
@Input()
recordId: string ;
ngOnInit() {
console.log(">> rId-oninit" , this.recordId) ;
.....
}
}
并且在 html 中,我将 [recordId]
输入值作为 _INSERT_
:
<app-table-multiple-edit
[table]="table"
[checkedRows]="checkedRows"
[recordId]="_INSERT_"
(emitMultipleClose)="closeSingleRowInsert($event)"
(emitHoverAndData)="showMultipleEditStatus($event)">
</app-table-multiple-edit>
当我在控制台中 运行 时,我总是得到 >> rId-oninit undefined
我已经尝试使用其他值,如“-1”并清理缓存,正如您可能猜到的那样,这意味着我运行没有选择。
我做错了什么?什么可以改变我的 html 和 ngOnInit
方法
之间的值
在Angular中,当你在HTML中使用[input]="data"
时,data
基本上是一个模板表达式。模板表达式类似于 JavaScript.
Angular 执行 data
并将其分配给绑定目标的 属性,此处为 input
。这允许我们通过更改 data
.
来动态更改从组件分配给 input
的值
这类似于 AngularJS 中的插值,为了在 HTML 中显示 {{data}}
,需要在控制器中定义 data
。
在您的例子中,[recordId]="_INSERT_"
,recordId 是 Input()
绑定目标,_INSERT_
是您的模板表达式。 Angular 尝试执行此表达式,但由于您尚未在组件中定义 _INSERT_
,因此它的计算结果为 undefined
.
如果您需要将常量字符串传递给 @Input()
,只需像 [recordId]="'This is just an example'"
那样传递一个字符串作为表达式。如果你需要它是动态的,你应该在你的组件中给 _INSERT_
赋值。
由于模板表达式类似于JavaScript,如果需要,您甚至可以传递条件表达式,[recordId]="recordExists ? '1' : null"
希望这能回答您的问题。
有关详细信息,请参考以下文档:https://angular.io/guide/template-syntax#template-expressions
我的 Angular 应用程序中有以下 TableMultipleEditComponent
:
export class TableMultipleEditComponent implements OnInit {
@Output() emitMultipleClose: EventEmitter<boolean> = new EventEmitter<
boolean
>();
@Output() emitHoverAndData: EventEmitter<any> = new EventEmitter<any>();
showBar: boolean;
@Input()
table: Table;
@Input()
checkedRows;
@Input()
recordId: string ;
ngOnInit() {
console.log(">> rId-oninit" , this.recordId) ;
.....
}
}
并且在 html 中,我将 [recordId]
输入值作为 _INSERT_
:
<app-table-multiple-edit
[table]="table"
[checkedRows]="checkedRows"
[recordId]="_INSERT_"
(emitMultipleClose)="closeSingleRowInsert($event)"
(emitHoverAndData)="showMultipleEditStatus($event)">
</app-table-multiple-edit>
当我在控制台中 运行 时,我总是得到 >> rId-oninit undefined
我已经尝试使用其他值,如“-1”并清理缓存,正如您可能猜到的那样,这意味着我运行没有选择。
我做错了什么?什么可以改变我的 html 和 ngOnInit
方法
在Angular中,当你在HTML中使用[input]="data"
时,data
基本上是一个模板表达式。模板表达式类似于 JavaScript.
Angular 执行 data
并将其分配给绑定目标的 属性,此处为 input
。这允许我们通过更改 data
.
input
的值
这类似于 AngularJS 中的插值,为了在 HTML 中显示 {{data}}
,需要在控制器中定义 data
。
在您的例子中,[recordId]="_INSERT_"
,recordId 是 Input()
绑定目标,_INSERT_
是您的模板表达式。 Angular 尝试执行此表达式,但由于您尚未在组件中定义 _INSERT_
,因此它的计算结果为 undefined
.
如果您需要将常量字符串传递给 @Input()
,只需像 [recordId]="'This is just an example'"
那样传递一个字符串作为表达式。如果你需要它是动态的,你应该在你的组件中给 _INSERT_
赋值。
由于模板表达式类似于JavaScript,如果需要,您甚至可以传递条件表达式,[recordId]="recordExists ? '1' : null"
希望这能回答您的问题。
有关详细信息,请参考以下文档:https://angular.io/guide/template-syntax#template-expressions