【发布时间】:2018-03-16 03:08:50
【问题描述】:
我正在尝试将具有关联(更改)事件的选择输入中的输入值从子组件传递到父元素。 希望每次更新子组件中的变量时更新变量。
我的问题与Question 不同,因为我的变量在更改事件中发生更改,并且每次变量更改时都需要更新。
我能够使用 ViewChild 和 AfterViewInit 解决这个问题,但我在控制台中收到错误消息:ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked。以前的值:'未定义'。当前值:“测试”。
认为必须有一种简单的方法来做到这一点。请记住,我还是 Angular 的新手。
子组件模板:
<form>
<div class="form-group">
<label for="Master-Products">Select Master Product</label>
<select [(ngModel)]="selectedValue" name="pow" (change)="pow = $event.target.value; onKeyUp()" class="form-control" id="Master-Products">
<option *ngFor="let pow of powers" [value]="pow">{{pow}}</option>
</select>
</div>
</form>
子组件:
export class MasterInputComponent {
powers: any[] = [ 'power1', 'power2', 'power3' ];
submitted = false;
pow:string = 'Testing';
selectedValue = null;
constructor() { }
onKeyUp(value): void{
console.log('Value: ',this.pow);
}
父组件模板:
<div role="tabpanel" class="tab-pane" id="accessories">
<h1>ACCESSORIES</h1>
<h4>Testing: {{power}}</h4>
<master-input (change)="recieveMessage($event.target.value)"></master-input>
<accessories></accessories>
父组件:
export class AppComponent implements AfterViewInit{
@ViewChild(MasterInputComponent) child;
title = 'Having FUN with Angular';
posts: any[];
power:string;
constructor(private service:ProductsService){}
ngAfterViewInit(){
this.power = this.child.pow;
}
recieveMessage(value){
console.log('Event: ',value);
this.power = value;
console.log('Favorite has changed')
}
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
在这种情况下你会想要
Output和一个EventEmitter :) angular.io/guide/… -
应该可以的... :) stackblitz.com/edit/…
-
我稍微更新了我的 stackblitz,所以如果您现在检查,它会将值分配给变量。在这种情况下,现在最好的办法是您采用 stackblitz,将您的代码应用到它上面展示错误,这样更容易提供帮助:)
-
完美,非常感谢!将仔细分析您的答案以完全了解您的所作所为。
标签: javascript angular components