【问题标题】:ngFor without data bindingngFor 没有数据绑定
【发布时间】:2018-10-16 13:13:12
【问题描述】:

如何在没有任何数据绑定的情况下使用*ngFor 指令?

除了初始渲染之外,我不希望模型的任何更改反映在视图中,也不希望视图中的任何更改反映在模型中。

示例

@Component({
  template: '<p *ngFor="let character of characters">{{ character }}</p>',
})
export class TestComponent {
  public characters = ['a', 'b', 'c'];
}

如果我将一个额外的字符推到characters 数组上,它将在模板中呈现。

我不想要这个。我只希望它渲染一次(使用前 3 个字符),并且任何修改都不应该导致视图发生任何变化。

【问题讨论】:

  • 你的意思是你想要一个“一次性”绑定吗?我不明白你的问题,你能提供更多关于你的目标的信息吗?
  • 只需将初始检索的值分配给不同的变量并循环该变量..
  • @Moug 我更新了我的问题
  • @AshishRanjan 的答案是最简单的,否则,如果您希望所有组件都具有此行为,则可以将 changeDetection 设置为“OnPush”,并且仅在引用对象更改时绑定刷新,而不是值: changeDetection: ChangeDetectionStrategy.OnPush
  • @Moug:是的,对!如果 Danyg 打算使用 OnPush 变更检测策略,那么他的组件非常具体。 View 不会检测到任何变量的更改,除非引用发生更改。这也会影响该组件中使用的任何其他组件。

标签: angular data-binding ngfor


【解决方案1】:

只要不反映模型在初始加载后视图的任何变化,那么您可以使用不同的变量在模板中循环。

@Component({
  template: '<p *ngFor="let character of initialCharacters">{{ character }}</p>',
})
export class TestComponent {
  public characters = ['a', 'b', 'c'];
  public initialCharacters = this.characters.slice();
}

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2020-03-08
    • 2011-05-11
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    相关资源
    最近更新 更多