angular - 使用 @Output 从子组件更改父变量
问题描述
我想要什么- 当我点击反馈按钮时,应该会打开一个带有取消和提交按钮的反馈表。一旦我点击取消/提交,反馈表应该被关闭。如果我再次点击反馈按钮,反馈表应该会再次打开。
发生了什么- 当我点击反馈按钮时,一个带有取消和提交按钮的反馈表即将出现。一旦我点击取消/提交,反馈表就会关闭。但如果我再次点击反馈按钮,反馈表不会打开。
我所做的 - 我在父组件上有一个按钮,点击调用反馈组件(默认情况下反馈页面将被隐藏),就像这样 -
app.component.html
<button type="button" (click)="showFeedbackForm()">Feedback</button>
<div *ngIf="feedbackForm">
<app-feedback (onHide)="changeHide($event)"></app-feedback>
</div>
app.component.ts
export class AppComponent {
name = "Angular";
feedbackForm = false;
showFeedbackForm() {
this.feedbackForm = true;
}
changeHide(val: boolean) {
this.feedbackForm = val;
console.log("changeHide :: ", this.feedbackForm); // this feedbackForm value is not getting updated.
}
}
& 反馈组件看起来像这样 -
反馈.component.html
<div *ngIf="feedback">
<form (ngSubmit)="onSubmit()">
<label for="fname">First name:</label>
<input type="text" id="fname" name="fname"><br><br>
<label for="lname">Last name:</label>
<input type="text" id="lname" name="lname"><br><br>
<button type="submit" value="Submit">Submit</button>
<button type="cancel" value="cancel" (click)="closeFeedback()">Cancel</button>
</form>
</div>
反馈.component.ts
import { Component, OnInit, Output, EventEmitter } from "@angular/core";
@Component({
selector: "app-feedback",
templateUrl: "./feedback.component.html",
styleUrls: ["./feedback.component.css"]
})
export class FeedbackComponent implements OnInit {
constructor() {}
ngOnInit() {}
feedback = true;
closeFeedback() {
this.feedback = false;
this.setHide();
}
onSubmit() {
console.log("onSubmit called");
}
@Output() feedbackForm = new EventEmitter<boolean>();
setHide() {
this.feedbackForm.emit(false);
}
}
在第二次点击反馈按钮时,没有调用反馈组件。
我不确定我的做法是否正确。stackblitz 链接在这里。请随时更新。
请帮助/指导我
解决方案
在 app.component.html 中
<app-feedback (feedbackForm)="changeHide($event)"></app-feedback>
唯一的问题是feedback.component.ts out 属性是
this.feedbackForm.emit(false);
在您使用时(onHide)。
您应该使用feedbackForm
上面给出的作为输出属性。
你只需要改变这条线。
<app-feedback (feedbackForm)="changeHide($event)"></app-feedback>
如果您有任何疑问,请告诉我。
推荐阅读
- hadoop - hive 中组合器或分区器的实现
- jupyterhub - create_system_users = True 不起作用
- laravel - 测试存储时创建的假文件
- arrays - 使用数组元素作为我想从文件中读取的变量的名称
- html - 通过 *ngFor 在 Angular 中创建盒子
- python - 关于 Protobuf PrintField() 的说明
- java - 使用 IEDriverServer 3.9.0.0 运行 selenium 时无法启动 IE 11
- javascript - 在 vanilla Javascript 中单击时将类减 1
- java - 连接到现有 Spark 集群时如何添加类或 jar?
- bash - 在 Ubuntu 上安装最新的 docker compose