【发布时间】:2017-08-01 17:09:27
【问题描述】:
我正在尝试将服务共享给一个组件,为此,我创建了 service.ts,代码如下所示:
import { Subject } from 'rxjs/Subject';
export class CommonService {
CommonList = new Subject<any>();
}
当然,这个服务在 app.module.ts 的提供者列表中 然后,我有一个组件侧边栏。 我正在从侧边栏组件订阅此服务:
ngOnInit() {
this.subscription = this.CommonServicePrivate.CommonList.subscribe(
(result: any) => {
console.log(result);
}
);
}
这就是问题所在,如果我尝试通过某种方法从 app.component.ts 在此服务中添加一些列表:
click(){
this.CommonService.CommonList.next([{"some_key":"some_value"}]);
}
这确实有效,但是当我尝试这个时:
ngOnInit(){
this.CommonService.CommonList.next([{"some_key":"some_value"}]);
}
它不起作用。
关键是我想将此服务传递给加载应用程序的组件。
在 ngAfterViewInit 的情况下,当我尝试将此结果呈现给某个模板时,我收到错误消息: ExpressionChangedAfterItHasBeenCheckedError:检查后表达式已更改。以前的值:'未定义'。当前值:
如果有人有这种经历,请分享给我。 谢谢。
【问题讨论】:
-
我猜你是在组件加载之前寻找路由器解析,你需要组件中的数据吗?
-
是的,因为关于侧边栏的信息来自Rest API,我需要自动加载它,但另一点是这个侧边栏我也应该加载到另一个组件中,所以我真的不想要调用此 API 两次,解决方案是我将其存储在服务中,并从组件中调用此服务,但问题正如我所提到的:通过方法它可以工作,但是 onload - 它不起作用,有时会给我错误:例外:表达式在检查后发生了变化。
标签: angular