angular - 继承的组件无法更新基础组件中的属性
问题描述
我有一个继承基础组件的 Angular 组件。
@Component({
selector: "my-baseclass-component",
template: `
<div style="border:1px solid red;padding:10px">
counter value (check console to see it gets incremented) : {{ counter }}
<ng-content select="[body]"></ng-content>
<br />
</div>
`
})
export class BaseClassComponent {
public counter = 0;
constructor() {}
}
我只想在单击按钮时从继承的组件中增加基本组件中的计数器。
@Component({
selector: 'my-inherited-component',
template: `<my-baseclass-component #myBaseclass>
<div style="border:1px solid black" body>Inherited Component Content
<button (click)="click()">toggle</button>
</div>
</my-baseclass-component>`
})
export class InheritedComponent extends BaseClassComponent {
click(){
this.counter++;
console.log('clicked:' + this.counter);
}
}
计数器变量使用大括号表示法显示在基本组件模板中,{{counter}}
但它从不刷新,尽管值本身已正确递增。
我在 stackblitz 中重现了这个问题:
https://stackblitz.com/edit/angular-ivy-sssxvt?file=src/app/baseclass.component.ts
我究竟做错了什么 ?
解决方案
当你<app-some-comp></app-some-comp>
输入模板时,你告诉 Angular 实例化一个新的隔离实例。AppSomeComponent
在你的例子中
@Component({
...
template: `
<my-baseclass-component #myBaseclass>
....
</my-baseclass-component>`
})
export class InheritedComponent extends BaseClassComponent {}
您创建了InheritedComponent
组件(从BaseClassComponent
类派生)和一个新的分离实例。<my-baseclass-component
如果您希望counter
在内部<my-baseclass-component
组件中反映出来,您应该自行更新它。
有几种选择:
手动更新它https://stackblitz.com/edit/angular-ivy-gr3ws3?file=src%2Fapp%2Finherited.component.ts:
(click)="click(); myBaseclass.counter = counter"
使用属性绑定https://stackblitz.com/edit/angular-ivy-fhj7n7?file=src%2Fapp%2Finherited.component.ts
export class BaseClassComponent { @Input() counter = 0; <my-baseclass-component [counter]="counter">
推荐阅读
- mysql - 如何恢复/恢复损坏的 RDS 实例?
- mysql - 在 MySQL 中存储 MatDatepicker 时间戳
- amazon-web-services - 当从 SQS 队列中删除一条消息时,配置了较高的可见性超时值,如果我删除该消息,它会立即被删除吗?
- java - 当我用jsoup解析时,标签的内容消失了
- python - 使用python打印硬拷贝时选择打印机
- reactjs - 用于实现模态对话框的动态导入 next.js
- python - 如何在 for 循环中将用户输入保存为整数和字符串
- java - Spring Boot ModelMapper - 无会话
- numpy - 谁能解释一下这个代码输出
- ruby-on-rails - rails app current_user 方法在生产中不起作用