Angular 4使用Observable和Subscribe从Service调用Component

时间:2018-01-12 16:14:46

标签: angular observable

我有一个服务通过Observable和Subscribe调用组件但是对于我的生活,我看不到组件的任何结果。我的代码如下。该服务和组件已在我的app.module.ts中注册。

 @Injectable()
 export class MyService {

  private messageSource = new Subject<any>();
  currentMessage = this.messageSource.asObservable();

  constructor() {}

  doSomething() {
   this.messageSource.next();
   console.log(" doSomething .........");
  }
}

@Component({
  selector: 'angular-loader',
  templateUrl: './loader.component.html',
  styleUrls: ['./loader.component.css'],
})

export class MyComponent implements OnInit {

   private subscription: Subscription;
   message:string;

   constructor(private myService: MyService) { }

   ngOnInit() {
     this.myService.currentMessage.subscribe(() => {
     alert('(Component2) Method called!');
    });
   }
 }

2 个答案:

答案 0 :(得分:0)

它可能取决于你的RxJS版本,但是你可以使用没有值的subject.next()

对我来说有两种可能性:

  • 您的RxJS版本太低,没有值的next()没有做任何事情(我不认为这是问题所在。)
  • 或者组件进行通信的方式存在问题。可能是因为你从另一个组件调用了doSomething()方法而且subscribe()没有正确加载,因此无法接收结果,在这种情况下我建议你检查你的组件是否是正确加载,我也会将订阅从ngOnInit()移到constructor()

答案 1 :(得分:0)

什么在您的 doSomething(message: string) { this.messageSource.next(message); console.log(" doSomething ........."); } 中添加了什么?

我习惯看到看起来更像这样的东西:

th:inline

然后将消息添加到Observable流中,然后将其广播给您的订阅者。

(但即使没有传递值,它仍然应该播放通知,你应该看到你的警报。)