为什么是@ViewChildren zero-length?
Why is @ViewChildren zero-length?
我 follow these to implement ViewChildren,但无法获得 children。为什么?
@ViewChildren(TextField) inputs: QueryList<TextField>;
ngAfterViewInit(): void {
console.log('this.inputs.length = ', this.inputs.length);
// the length is 0
}
DEMO
在模板中添加模板变量 textField
(可以是任何东西):
<StackLayout class="home-panel">
<TextField #textField hint="Enter text1..."></TextField>
<TextField #textField hint="Enter text2..."></TextField>
</StackLayout>
那么这将如预期的结果:
@ViewChildren('textField') inputs: QueryList<ElementRef>;
关于我们可以查询的内容有很好的答案
所以我们可以查询匹配模板元素的angular指令,但是没有带有TextField
选择器的指令。 TextField 是 nativescript 组件而不是 angular。
查询 TextValueAccessor
只有 TextValueAccessor 指令,但要查询它,您应该使用它的选择器:
TextField[ngModel],TextField[formControlName],TextField[formControl],
例如,以下应该有效:
模板
<StackLayout class="home-panel">
<TextField hint="Enter text1..." ngModel></TextField>
<TextField hint="Enter text2..." ngModel></TextField>
^^^^^^^
notice attribute here
</StackLayout>
component.ts
import { TextValueAccessor } from 'nativescript-angular/forms/value-accessors';
...
@ViewChildren(TextValueAccessor) inputs: QueryList<TextField>;
查询元素引用
否则使用模板引用变量:
模板
<TextField #ref></TextField>
component.ts
@ViewChildren('ref') inputs: QueryList<ElemenetRef>;
我 follow these to implement ViewChildren,但无法获得 children。为什么?
@ViewChildren(TextField) inputs: QueryList<TextField>;
ngAfterViewInit(): void {
console.log('this.inputs.length = ', this.inputs.length);
// the length is 0
}
DEMO
在模板中添加模板变量 textField
(可以是任何东西):
<StackLayout class="home-panel">
<TextField #textField hint="Enter text1..."></TextField>
<TextField #textField hint="Enter text2..."></TextField>
</StackLayout>
那么这将如预期的结果:
@ViewChildren('textField') inputs: QueryList<ElementRef>;
关于我们可以查询的内容有很好的答案
所以我们可以查询匹配模板元素的angular指令,但是没有带有TextField
选择器的指令。 TextField 是 nativescript 组件而不是 angular。
查询 TextValueAccessor
只有 TextValueAccessor 指令,但要查询它,您应该使用它的选择器:
TextField[ngModel],TextField[formControlName],TextField[formControl],
例如,以下应该有效:
模板
<StackLayout class="home-panel">
<TextField hint="Enter text1..." ngModel></TextField>
<TextField hint="Enter text2..." ngModel></TextField>
^^^^^^^
notice attribute here
</StackLayout>
component.ts
import { TextValueAccessor } from 'nativescript-angular/forms/value-accessors';
...
@ViewChildren(TextValueAccessor) inputs: QueryList<TextField>;
查询元素引用
否则使用模板引用变量:
模板
<TextField #ref></TextField>
component.ts
@ViewChildren('ref') inputs: QueryList<ElemenetRef>;