- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
https://stackblitz.com/edit/angular-xpamld
问题:有人能帮我理解为什么我的原型(prototype)的 changeDetection: ChangeDetectionStrategy.OnPush
仍然允许我更新内部值 name
吗?如果这不是 ChangeDetectionStrategy.OnPush
应该阻止的,它应该做什么?
app.component.ts:
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent {
public name = 'Angular 5';
public changeName() {
this.name = 'Outer';
}
}
app.component.html:
<hello name="{{ name }}"></hello>
<button (click)="changeName()">Outter Change</button>
<p>{{name}}-- outer</p>
<p>
Start editing to see some magic happen :)
</p>
hello.component.ts:
@Component({
selector: 'hello',
template: `<h1>Hello {{name}}!</h1> <button (click)="changeName()">inner Change</button>`,
styles: [`h1 { font-family: Lato; }`],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class HelloComponent {
@Input() name: string;
public changeName() {
this.name = 'Inner';
}
}
最佳答案
因为原始数据类型是不可变的 - 如果您更改它,它的引用也会更改,所以您的组件的 ChangeDetectorRef
知道它必须检测更改(因为 OnPush
查找引用更改,而不是数组、对象中的数据突变)。如果你想在基元上避免这种情况,你可以使用 detach()
/reattach()
在 ChangeDetectorRef 实例上手动停用/激活它:
import { ChangeDetectorRef } from '@angular/core';
export class HelloComponent {
@Input() name: string;
constructor(private ref: ChangeDetectorRef) {}
public changeName() {
this.ref.detach();
this.name = 'Inner';
}
}
关于angular - changeDetection : ChangeDetectionStrategy. OnPush 似乎不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48605736/
在过去几年从事 React 项目之后,我才开始接触 Angular。 我有一个使用 changeDetection: ChangeDetectionStrategy.OnPush 的组件,但我不喜欢我
我不明白为什么子组件的更改检测会在这种情况下运行: import { Component, ChangeDetectionStrategy } from '@angular/core' @Compon
我不明白为什么子组件的更改检测会在这种情况下运行: import { Component, ChangeDetectionStrategy } from '@angular/core' @Compon
我正在尝试熟悉 Angular 2 的 ChangeDetectionStrategy.OnPush 性能提升(如 here 所述)。但我这里有古玩盒。 我有父 AppComponent: @Comp
我正在构建一个包含许多组件的 Angular 4 应用程序,其中 ChangeDetectionStrategy 是 OnPush。同时the Angular Documentation on the
我是否应该始终在我的组件中使用 ChangeDetectionStrategy.OnPush? 我总是听说 OnPush 非常棒,它解决了很多问题,加快了 Angular 应用程序的速度,甚至摆脱了
我有一个使用服务提交一些数据的组件。 该组件使用 ChangeDetectionStrategy.OnPush ,但发生了一些奇怪的事情: 当请求 成功 : next回调被调用,formStatus更
正如标题所说:我正在处理一个非常大的项目,而且我使用过的组件很少 ChangeDetectionStrategy.OnPush以免表现不佳。我想知道,将策略的每个组件都放入“好”,以防万一,使用 Ch
https://stackblitz.com/edit/angular-xpamld 问题:有人能帮我理解为什么我的原型(prototype)的 changeDetection: ChangeDete
如何将 ChangeDetectionStrategy.OnPush 设置为每个的默认策略我的应用程序中的组件,而不是在每个组件的模板上编写changeDetection: ChangeDetecti
我试图了解 ChangeDetectionStrategy.OnPush机制。 我从我的读数中收集到的是,通过将旧值与新值进行比较来进行更改检测。如果对象引用未更改,则该比较将返回 false。 但是
我有这个简单的组件。 @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-spinner'
在我的 Angular 应用程序中,我通过实现 ControlValueAccessor 创建了一个自定义表单元素。界面。 因此,在我的组件中,我正确实现了该接口(interface)的所有方法,包括
我有 Angular 分量 l @Component({ selector: 'aas-add-option', templateUrl: './add-option-modal.compon
假设我有一个这样的组件结构: AppComponent HeaderComponent ContentComponent TodosComponent
我正在使用可观察对象将服务列表返回到我的组件,在我的组件中我使用 ChangeDetectionStrategy.OnPush,在模板中我使用异步管道,希望这会带来一些性能优势,因为未执行更改检测所有
我转载了一个简单的stackblitz证明我一直遇到的问题。问题是我有一个将 bool 值传递给子组件的父组件。这个 bool 值是子组件上的@Input。需要注意的是,父组件使用 ChangeDet
我有一个容器组件,其中注入(inject)了一个服务。该服务包含一个可观察的。在容器组件的模板中,我使用异步管道将该可观察对象绑定(bind)到子组件的输入属性。一切似乎都正常,除了我必须与 UI 交
我有两个组件,我在其中使用 ChangeDetectionStrategy.OnPush。父组件: @Component({ changeStaregy: ChangeDetecti
我正在使用 OnPush 策略并根据此 article如果没有输入更改,则无需检查组件的模板。但在我的示例中,当我单击触发按钮并且输入没有更改时,在这种情况下 ngAfterViewChecked H
我是一名优秀的程序员,十分优秀!