继承组件无法更新基本组件中的 属性

Inherited component fails to update property in base component

我有一个 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 class)和 <my-baseclass-component 的新分离实例 .

如果您希望 counter 反映在内部 <my-baseclass-component 组件中,您应该自行更新它。

有几种选择: