角度 2 服务中的变化检测
Angular 2 Change detection in service
我正在查看Angular 2测试版,并且正在努力解决更改检测的工作原理。我做了一个简单的 plunkr 示例,显示了我遇到的一个问题。
//our root app component
import {Component, Injectable} from 'angular2/core'
@Injectable()
export class AuthService {
public state: boolean = true;
change() {
this.state = false;
console.log(this.state);
}
}
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
<p>{{state}}</p>
<button (click)="doLogout()" class="btn btn-success">logout</button>
<button (click)="changeName()" class="btn btn-success">change name</button>
</div>
`,
directives: [],
providers: [AuthService],
})
export class App {
constructor(_auth: AuthService) {
this.name = 'Angular2';
this._auth = _auth;
this.state = _auth.state;
}
doLogout() {
this._auth.change();
}
changeName() {
this.name = "something else";
}
}
当您按下注销按钮时,我正在更新身份验证服务中的状态值。我希望视图也会更新其显示的值,但是当它应该更新为 false 时,它保持为真。但是,打印的控制台值是正确的。
https://plnkr.co/edit/CJBjRvyO9aSV0SSHm66R?p=preview
有人可以解释为什么它不起作用,以及我如何解决它。
您只分配一次this.state
- 在创建App
组件时在构造函数中。以后的更改不会反映。
您可能希望改为绑定到<p>{{_auth.state}}</p>
或订阅服务中的EventEmitter
,并在每次在服务中更新值时更新state
。有关示例,请参阅 Plunker。
这不是一个角度 2 问题。Angular 检测引用中的更改,这不是引用:
this.state = _auth.state;
更改如下:
{{_auth.state}}
相关文章:
- 如何检测服务广告维度
- 检测数据的变化
- 如何检测和打印变化变量LESS
- 检测 DIV 的高度何时变化,而无需轮询或突变观察者
- 检测observableArray是否发生变化
- 检测Ionic中特定的应用程序状态变化
- angular应用程序中的浏览器功能检测:使用服务、指令、控制器
- 如何在呈现页面后使用 Java 脚本检测 dom 元素值的值是否有任何变化(例如,任何输入或复选框值更改)
- 控制器切换后匿名功能中的访问服务数据发生变化
- 使用 jquery 检测变量变化
- 如何动态检测浏览器视口大小的变化
- 角度2的变化检测是否总是从根部开始
- 变化检测中的角度2+GridStack错误
- 角度 2 服务中的变化检测
- Firefox中的Angular2变化检测无限循环
- angular2在变化检测后在画布上绘制图像
- 检测Angular服务中的路由变化
- angularjs 2 rc4变化检测:检查后表达发生变化
- Angular2:可观察对象内部的变化检测
- 帧源变化检测