Angular 2更改检测,ngClass模型由同级组件更新,但模板确实更新了'不要精神抖擞
Angular 2 change detection, ngClass model gets updated by sibling component but the template does't get refreshed
我有一个类似这样的设置:
main.ts-常规结构,没有问题
app.component.ts-常规结构,没有问题
app.component.html
<navigation-cart></navigation-cart>
<div id="content">
... other stuff ...
<start-arrow></start-arrow>
</div>
ui layout.service.ts-此服务负责打开和关闭应用程序中的所有区域。
import {Injectable} from '@angular/core';
@Injectable()
export class UiLayoutService {
startArrowIsVisible: boolean = true;
openStartArrow() {
this.startArrowIsVisible = true;
console.log('openStartArrow', this.startArrowIsVisible);
}
closeStartArrow() {
this.startArrowIsVisible = false;
console.log('closeStartArrow', this.startArrowIsVisible);
}
...
}
导航cart.component.ts和启动箭头.component.ts都具有UiLayoutService
注入
启动箭头.组件.html
<a (click)="uiLayoutService.openStartArrow();">Open</a>
<a (click)="uiLayoutService.closeStartArrow();">Close</a>
<div id="start-arrow" [ngClass]="{active: uiLayoutService.startArrowIsVisible}">
... Some pretty content here ...
</div>
导航cart.component.html
<a (click)="uiLayoutService.openStartArrow();">Open</a>
<a (click)="uiLayoutService.closeStartArrow();">Close</a>
... Some other content...
以下是困扰我的问题:
- 如果我点击
<start-arrow>
中的Open
和Close
链接,一切都很好。模板将更新,<div id="start-arrow">
将按预期关闭和/或重新打开。控制台显示这些操作运行良好 - 如果我从
<navigation-cart>
中单击Open
和Close
链接,控制台会触发消息,我会看到startArrowIsVisible
值正在更新,但<start-arrow>
中没有发生模板更新。[ngClass]="{active: uiLayoutService.startArrowIsVisible}
似乎没有触发模板更新。我想这是因为进行了优化,以防止不必要地渲染所有应用程序的布局。在这种情况下,如何触发布局刷新
我假设您多次提供UiLayoutService
服务,当单击时,值会在与组件视图绑定的实例不同的实例上更新。Angular DI为每个提供程序创建一个新实例。如果您希望在应用程序之间共享一个实例,只需在根组件(或另一个通用父组件)上共享一次即可
相关文章:
- Javascript循环不会自我更新
- 添加文字和评论功能更新Div
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- $rootScope未使用forEach进行更新
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- Angular:更新一次性绑定的数据
- Javascript更新孙窗口中的表单元素
- 使用AngularJS中的筛选器更新给定的表
- 从选项页面更新chrome扩展清单权限
- 如何在不刷新页面的情况下更新显示框
- 延期承诺值未更新/解析/延期
- 标记的实时更新,无需加载页面谷歌地图API V3
- 使用mongodb更新中的一个变量
- 访问jsrender模板中的全局javascript变量并更新它
- Angular 2更改检测,ngClass模型由同级组件更新,但模板确实更新了'不要精神抖擞