在使用angular4框架开发过程中,会遇到某些场景。
例如:公共组件中有一个全局下拉列表,每当该下拉列表值改变,所有激活的子组件都要做出相应改变。ng1时有$watch指令,但是在ng4中没有找到类似方法。
目前采用的是生命周期的Docheck(),对性能消耗非常大,还有一些不可预期的问题,想请教有没有更好的监听方法.
在使用angular4框架开发过程中,会遇到某些场景。
例如:公共组件中有一个全局下拉列表,每当该下拉列表值改变,所有激活的子组件都要做出相应改变。ng1时有$watch指令,但是在ng4中没有找到类似方法。
目前采用的是生命周期的Docheck(),对性能消耗非常大,还有一些不可预期的问题,想请教有没有更好的监听方法.
你在哪里改的数据,就在那里监听就好了啊
比如有这么一个服务
@Injectable()
class CustomService{
public customAttr:number=0;
constructor(){
setInterval(()=>this.customAttr=Math.random(),1000);
}
}
在组件里依赖注入这个服务
constructor(public customService:CustomService){}
然后在html模版就能直接使用服务里的属性值做渲染了
<div>{{customService.customAttr}}</div>
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
结合
Rxjs
,下拉列表的值作为一个BehaviorSubject
放到公用的service中,子组件模版上直接使用async pipe
解析值。例(公用组件的service):
每次修改下拉值只需(设注入service为
xxxService
):所有的子组件引用服务后只需在模版使用
async pipe
便可自动监听订阅数据变化:模版
也可以直接在组件中订阅:
注意
service
一定要保持单例