【问题标题】:Inherited component fails to update property in base component继承的组件无法更新基础组件中的属性
【发布时间】:2021-05-09 06:59:52
【问题描述】:

我有一个继承基础组件的 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

我做错了什么?

【问题讨论】:

    标签: angular angular-components


    【解决方案1】:

    当您将&lt;app-some-comp&gt;&lt;/app-some-comp&gt; 放入模板时,您会告诉Angular 实例化AppSomeComponent一个新的隔离实例

    在你的例子中

    @Component({
      ...
      template: `
           <my-baseclass-component #myBaseclass>
               ....
          </my-baseclass-component>`
    })
    export class InheritedComponent extends BaseClassComponent {}
    

    您创建了InheritedComponent 组件(派生自BaseClassComponent 类)和&lt;my-baseclass-component一个新的分离实例

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

    有几种选择:

    【讨论】:

    • 感谢@yurzui 的清晰解释;现在这完全有道理。当之无愧的赏金:)(我必须等待 20 小时才能将其授予您,但我会这样做)
    猜你喜欢
    • 2022-11-16
    • 2016-11-13
    • 2020-09-15
    • 2011-06-18
    • 2020-01-19
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多