Javascript 角度2.0相当于$scope.$apply

Javascript 角度2.0相当于$scope.$apply,javascript,angularjs,angular,Javascript,Angularjs,Angular,我正在尝试开始使用angular 2.0,现在我想知道在一些外部事件更改数据后如何启动视图更新 详细地说,我有一个谷歌地图和一个点击地图事件的处理程序。用户单击地图后,我将单击的纬度和经度存储到控制器上的变量中 this.lat = event.latLng.lat(); this.lon = event.latLng.lon(); 在视图中,我希望显示这些值 <div> this is my spot: {{lat}} and {{lon}} </div> 这是我的

我正在尝试开始使用angular 2.0,现在我想知道在一些外部事件更改数据后如何启动视图更新

详细地说,我有一个谷歌地图和一个点击地图事件的处理程序。用户单击地图后,我将单击的纬度和经度存储到控制器上的变量中

this.lat = event.latLng.lat();
this.lon = event.latLng.lon();
在视图中,我希望显示这些值

<div> this is my spot: {{lat}} and {{lon}} </div>
这是我的位置:{{lat}}和{{lon}
在angular 1中,我只需在调用$scope.$apply()时将分配包装在控制器中

在Angluar2.0中更新视图的首选方法是什么

setTimeout(function(){
//whatever u want here
},0)

ref:

通常,您不需要做任何事情来更新视图。我会为你做一切的

但如果出于某种原因,您希望手动触发更改检测(例如,如果您的代码在角度区域之外运行),您可以使用方法来执行此操作。看

从'angular2/angular2'导入{组件,生命周期,NgZone}
@组成部分({
选择器:“我的应用程序”,
模板:`
你好,世界!!!时间:{{Time}。
`
})
导出类应用程序{
时间:数字=0;
建造商(lc:生命周期,区域:NgZone){
区域.跳动量侧向角度(()=>{
设置间隔(()=>{
this.time=Date.now();
lc.tick();//注释此行,“time”将停止更新
}, 1000);
})
}
多切克(){
log('check',Date.now());
}
}

尝试从角度核心导入ChangeDetectorRef,如下所示

import {Component, ChangeDetectorRef} from '@angular/core';
在构造函数中

constructor(private chRef: ChangeDetectorRef){
  chRef.detectChanges(); //Whenever you need to force update view
}

谢谢看起来我在角度区域之外(在谷歌地图的点击回调中)。调用lc.tick()完成了以下任务:-)嗯,可能更适合您的用例。它在angular zone内执行回调,执行后使用@alexpods运行LifeCycle.tick().I agrre。还有另一个问题可以通过这种方式解决,使用
NgZone:run
()另一个方法是使用
ChangeDetectorRef
这样:
this.chRef.detectChanges()
.LifeCycle不再存在:/angular的新版本中,它是
从'@angular/core'导入{Component,ChangeDetectorRef}这是有效的。有用的事实是,您甚至不需要最后的0。您可以完全跳过该参数。
constructor(private chRef: ChangeDetectorRef){
  chRef.detectChanges(); //Whenever you need to force update view
}