【发布时间】:2017-08-08 15:26:01
【问题描述】:
我用@input 装饰器创建了一个组件(比如说A)来从选择器中获取值。该组件将创建
基于选择器中给定的@input 值的文本字段。 A 组件正在另一个组件中使用(比方说 B)
B 组件具有 A 组件选择器和一个按钮。单击按钮时,我正在调用一个函数(比如说GetData)。
在GetData 函数内部,我通过为A 组件创建对象来从A 组件调用该函数(比如说getValues)。
单击GetData 函数时,它会从组件中调用getValues 函数,该函数会引发控制台错误,因为无法读取未定义的属性“长度”
请帮我解决这个问题提前谢谢
组件 A
import { Component, Input, OnInit, ViewChildren } from '@angular/core';
@Component({
selector: 'my-comp',
templateUrl: '<form #f="ngForm">
<div *ngFor="let iter of arr(num).fill(1);let i=index">
<input type="text" name="textValue{{i}}" ngModel #textValue="ngModel" [id]="'textValue' + i">
</div>
</form>'
})
export class MyCompComponent {
@ViewChildren('textValue') inputs;
public myData:any=[];
@Input('iterNumber') iterNum: number;
arr = Array;
num: number;
ngOnInit() {
this.num = this.iterNum;
}
getValues() {
debugger
for(var i=0;i<this.inputs.length;i++){
this.myData.push(this.inputs._results[i].viewModel)
}
console.log(this.myData)
}
}
组件 B
import { MyCompComponent } from '../my-comp/my-comp.component';
import { Component, Input,Directive } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: '<my-comp [iterNumber]=3></my-comp>
<button type="button" (click)="getValues()">GetValues</button>'
})
export class AppComponent {
public getValueList:any;
constructor(public cmpnt:MyCompComponent){
}
getData(){
this.cmpnt.getValues();
}
}
控制台出错
例外:
./AppComponent 类 AppComponent 中的错误 - 内联模板:1:0 原因:无法读取未定义的属性“长度”
原始异常:
无法读取未定义的属性“长度”
【问题讨论】:
-
你试过用空数组初始化输入吗?
-
是的没用
-
我建议查看 Angular 文档中的组件交互部分。有多种技术可以使组件相互交互angular.io/docs/ts/latest/cookbook/component-communication.html
标签: angular typescript