Angular2:视图未从订阅内部更新
我有一个订阅服务的简单angular2(rc1)组件。当服务更新订阅时,我可以将结果记录在组件的订阅中,但视图不会更新 我最初怀疑我的内部Angular2:视图未从订阅内部更新,angular,Angular,我有一个订阅服务的简单angular2(rc1)组件。当服务更新订阅时,我可以将结果记录在组件的订阅中,但视图不会更新 我最初怀疑我的内部this没有绑定到外部,但我在subscribe回调上使用了一个粗箭头,并且在构造函数的第一行尝试了旧的let self=this,然后执行self.SuccessMessage=result,但没有效果 我是否必须以某种方式强制进行更改检测?以下是我的组件: 从'angular2/core'导入{Component}; 从'rxjs/Subscription
this
没有绑定到外部,但我在subscribe
回调上使用了一个粗箭头,并且在构造函数的第一行尝试了旧的let self=this
,然后执行self.SuccessMessage=result
,但没有效果
我是否必须以某种方式强制进行更改检测?以下是我的组件:
从'angular2/core'导入{Component};
从'rxjs/Subscription'导入{Subscription};
从“./uploader.service”导入{UploaderService};
@组成部分({
选择器:“aoma上传器状态迷你”,
提供者:[],
视图提供程序:[],
templateUrl:“./app/uploader/mini uploader status.component.html”
})
导出类MiniUploadStatusComponent{
认购:认购;
成功消息:any={};
构造函数(私有上传服务:上传服务){
//视图正确显示此值:
this.successMessage.serverMessage='before';
this.subscription=\u uploaderService.fileSuccess$.subscripte(结果=>{
//这将激发并正确记录结果:
log('mini uploader:type of result',result);
//视图在此从不更新
this.successMessage=结果;
})
}
}
目前我的视图中只有
{{successMessage | json}}
。同样,它正确显示“before”值,但在订阅获取结果对象时不会更改。它看起来像是\u uploaderService
在Angulars区域之外运行。当值从其区域外更改时,Angular不会检测到更改
要使代码在区域内运行,请使用
构造函数(私有上传服务:上传服务,私有区域:NgZone){
//视图正确显示此值:
this.successMessage.serverMessage='before';
this.subscription=\u uploaderService.fileSuccess$.subscripte(结果=>{
//这将激发并正确记录结果:
log('mini uploader:type of result',result);
//视图在此从不更新
this.zone.run(()=>this.successMessage=result);
})
}
还有其他方法可以通知Angular的更改
如果在区域外调用
router.navigate()
时有其他代码运行,则只有zone.run(…)
才能正确解决此问题-除非首先有办法使您的服务在Angulars区域内运行。看起来\u uploaderService
在Angulars区域外运行。当值从其区域外更改时,Angular不会检测到更改
要使代码在区域内运行,请使用
构造函数(私有上传服务:上传服务,私有区域:NgZone){
//视图正确显示此值:
this.successMessage.serverMessage='before';
this.subscription=\u uploaderService.fileSuccess$.subscripte(结果=>{
//这将激发并正确记录结果:
log('mini uploader:type of result',result);
//视图在此从不更新
this.zone.run(()=>this.successMessage=result);
})
}
还有其他方法可以通知Angular的更改
如果在区域外调用
router.navigate()
时有其他代码运行,则只有zone.run(…)
将正确解决此问题-除非首先有办法使您的服务在Angulars区域内运行。如何在模板中显示消息?如何在模板中显示消息?如果这没有帮助,则需要更多信息,如模板中显示如何绑定到成功消息
。谢谢你的回答;我已更新问题以显示我的模板内容。不幸的是,区域运行(…)不起作用。我想我应该研究一下变更检测策略
?当然,如果你有一个很好的例子;-)。如果zone.run
没有解决该问题,则该问题是由其他原因引起的。你能发布什么console.log('mini-uploader:type of result',result.json())代码>打印到控制台?它打印的是我希望的,这是一个具有服务器响应的对象:迷你上载器:结果对象对象的类型{file:ResumableFile,serverMessage:“感谢您上载到服务器。”}
当您静态地将此添加到成功消息
时,是否显示它?这很奇怪。一切看起来都很好…如果这没有帮助,则需要更多信息,如模板中显示如何绑定到成功消息的部分。感谢您的回答;我已更新问题以显示我的模板内容。不幸的是,区域运行(…)不起作用。我想我应该研究一下变更检测策略
?当然,如果你有一个很好的例子;-)。如果zone.run
没有解决该问题,则该问题是由其他原因引起的。你能发布什么console.log('mini-uploader:type of result',result.json())代码>打印到控制台?它打印的是我希望的,这是一个具有服务器响应的对象:迷你上载器:结果对象对象的类型{file:ResumableFile,serverMessage:“感谢您上载到服务器。”}
当您静态地将此添加到成功消息
时,是否显示它?这很奇怪。一切看起来都很好。。。