Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular2:视图未从订阅内部更新_Angular - Fatal编程技术网

Angular2:视图未从订阅内部更新

Angular2:视图未从订阅内部更新,angular,Angular,我有一个订阅服务的简单angular2(rc1)组件。当服务更新订阅时,我可以将结果记录在组件的订阅中,但视图不会更新 我最初怀疑我的内部this没有绑定到外部,但我在subscribe回调上使用了一个粗箭头,并且在构造函数的第一行尝试了旧的let self=this,然后执行self.SuccessMessage=result,但没有效果 我是否必须以某种方式强制进行更改检测?以下是我的组件: 从'angular2/core'导入{Component}; 从'rxjs/Subscription

我有一个订阅服务的简单angular2(rc1)组件。当服务更新订阅时,我可以将结果记录在组件的订阅中,但视图不会更新

我最初怀疑我的内部
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:“感谢您上载到服务器。”}
当您静态地将此添加到
成功消息
时,是否显示它?这很奇怪。一切看起来都很好。。。