我有服务 - >
name:string;
subscription : Subscription;
constructor(private serv:SService) {
this.subscription=this.serv.getsubject().subscribe(message=>{console.log('hello');});
}
和组件 - >
package myclass;
public class c_myclass {
// class variable
String classvar;
// constructor
public c_myclass(String arg) {
// do stuff
}
// class function
public void classfunc(String arg) {
// do stuff
}
}
正如您所看到的,我将hello消息从服务传递给订阅者,但是在组件订阅者中没有获得该值,即使它没有记录任何单词。
plunker example
答案 0 :(得分:11)
observable可能在组件订阅之前从构造函数触发。因此该组件错过了该消息。
不要将this.subject.next(' hello')放在构造函数中,而是创建一个方法。
sendMessage (){
this.subject.next('hello');
}
然后,您可以从组件中调用this.serv.sendMessage(),它已经被订阅。
或者你可以查看BehaviorSubject,它将保留最新的值,并在订阅它时立即给它。
答案 1 :(得分:2)
它的工作。 plunker您需要添加此代码。如果当时没有人订阅它,那么主体就会发出价值,没有人知道它会发出价值。当有人订阅时,它不会发出最后一个值(BehaviorSubject会)。
passToServ() {
this.subject.next(2);
}
答案 2 :(得分:0)
如果订户是组件文件,则原因之一可能是忘记在应用程序中的某个位置添加组件的选择器。您必须在app.component.html中注册组件。