- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
你能帮我区分这两个东西吗。
根据我的理解,如果你只使用 observable,你可以使用 detectChanges()。因此,您可以直接更改组件属性或监视服务调用并返回一个可观察对象,然后调用 detectChanges(),更改将在 html 元素上可用。
但对于输入字段上的 [(ngModel)],您需要调用 tick() 才能在 html 元素上呈现更改。
所以如果我知道他们做什么以及何时使用什么,我会很棒。
提前致谢。
最佳答案
detectChanges
方法在 ViewRef 上可用.
class ViewRef extends ChangeDetectorRef {
// inherited from core/ChangeDetectorRef
markForCheck(): void <-----------------------------
detach(): void
detectChanges(): void
checkNoChanges(): void
reattach(): void
}
ViewRef
是组件的底层表示。当编写测试而不是 ViewRef
时,引入了另一个抽象,即 fixture
:
fixture = TestBed.createComponent(BannerComponent);
它包裹了类似于ViewRef
的组件。
detectChanges
方法为底层组件运行变更检测并执行以下操作:
还有很多其他的。
要了解更多信息,您可以阅读 Everything you need to know about change detection in Angular .因此,为了验证 DOM 中的更改或验证输入绑定(bind),您需要运行 detectChanges
。
Angular docs描述得很好:
The tick function is one of the Angular testing utilities and a companion to fakeAsync. You can only call it within a fakeAsync body.
Calling tick() simulates the passage of time until all pending asynchronous activities finish, including the resolution of the getQuote promise in this test case.
使用 ngModel
您需要调用它,因为在 ngModel
中创建的控件是异步注册的。这是来自 the article by Victor Savkin on forms 的引述:
To make it work, NgModel doesn’t add a form control synchronously — it does it in a microtask. In the example above, the three ngModels will schedule three microtasks to add the speaker, title, and highRating controls.
关于angular - FakeAsync/tick (Async/whenStable) 与 detectChanges(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46342594/
我正在使用 ng2-toastr 并收到以下错误 https://www.npmjs.com/package/ng2-toastr Attempt to use a destroyed view: d
有以下 2 个实体,具有以下属性: Parent ID Children Child ID ParentID Parent 现在我有以下代码: db.Confi
这个问题在这里已经有了答案: Angular 2 - View not updating after model changes (5 个答案) 关闭 6 个月前。 我正在开发 Angular 4
我使用的是 Angular2 的最终版本。 fixture.detectChanges() 调用了哪些生命周期事件,调用顺序是什么? 这方面的文档在哪里? 最佳答案 使用 fixture.detect
我正在尝试测试一个组件调用 detectChanges上面注入(inject)了ChangeDetectorRef 我已经逐步完成了代码,它肯定被调用了,但似乎我在组件和测试中得到了不同的 Chang
我将从以下概念开始这个问题:我在 StackOverflow 上看到了一个类似的问题,但该问题只回答了差异。 我想问的是我应该根据情况使用什么以及一种或另一种方法可能有什么缺点。 我知道 detect
说, - 有一个父组件 A 和一个子组件 B。 在组件B上设置OnPush。 有一刻,B 的一个不是输入绑定(bind)属性的属性发生变化,我想检测该变化并相应地更新 View 。 根据我的理解,应该
我正在复制 Angular 文档的一些示例以提高我对 Angular 单元测试的理解,但当我无法弄清楚发生了什么时,我最终进入了一个简单的测试用例。 这是我的 app.component.ts 文件,
我正在使用 Angular Meteor 2 创建一个简单的 UI。 1) 我有一个顶部导航栏组件,它有一个“注销”按钮。 2) 单击“注销”按钮时,它会重定向到“登录”。 3) 然后我在控制台中看到
我在测试中遇到 cdr.detectChanges() 问题。调用时发生错误,我没有任何信息,只是收到此错误: ZoneAwareError@webpack:///~/zone.js/dist/zon
我在 jasmine 中有以下代码: it('should pass on writing secondvalue in the input', async(() => { con
在 Angular 区域之外工作时,有两种方法可以检测变化 - 通过使用 NgZone.run 或使用 ChangeDetectorRef.detectChanges 方法重新进入区域。 NgZone
我的任务是为使用 Angular 开发的聊天应用程序编写测试。下面是我目前正在为其编写测试的 Angular 模板代码片段: check settin
阅读 How to use RxJs distinctUntilChanged?和 this ,似乎 distinctUntilChanged 将输出流更改为仅提供不同的连续值。 我的意思是,如果相同
第一个例子 我有以下测试: import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { Com
ChangeDetectorRef.markForCheck()有什么区别和 ChangeDetectorRef.detectChanges() ? 我只有found information on S
所以我的应用程序一直给我这个错误: extensions::uncaught_exception_handler:8 Error in event handler for runtime.onMess
我正在阅读 this文章中包含有关何时使用的部分 markForChange() . 在他的例子中,他有以下组件: @Component({ selector: 'cart-badge', t
我对 context.SaveChanges 是否会自动调用 DetectChanges 感到困惑。大多数有关 Entity Framework 的书籍和博客都说会。但我的简单代码片段。看起来 Sav
我正在用 Jasmine 和 Karma 学习单元测试。我的测试用例正在通过,但我不明白一件事。这是我的 typescript : // array list of objects where eac
我是一名优秀的程序员,十分优秀!