如何从Observer返回值?

时间:2017-09-09 17:07:22

标签: angular observable

我有以下功能:

private getTranslateMenuItem(key: string): string {
      this.translate.get(key).subscribe((res: string) => {
        return res;
    });
  }

我需要它,当我称之为:

时,它会返回我的数据
let title = this.getTranslateMenuItem('pop');

1 个答案:

答案 0 :(得分:3)

不要尝试返回observable发出的值,而是尝试简单地返回Observable并允许使用者使用发出的值,例如设置类属性:

<强>服务

public getTranslateMenuItem(key: string): Observable<string> {
  return this.translate.get(key);
}

<强>组件:

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: '{{title}}'
})
export class AppComponent  {
  title: string;

  constructor(private someService: SomeService) {}

  ngOnInit(): void {
     this.someService.getTranslateMenuItem('foobar')
         .subscribe(
             value => this.title = value,
             error => console.log(error),
             complete => console.log('Completed');
         );
  }
}

这种方法可以处理组件中的值,错误和完成,并允许服务根据需要处理检索和处理/格式化值。

或者,您可以使用组件模板中的async管道来订阅/取消订阅发布的值。

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: '{{title$ | async}}'
})
export class AppComponent  {
  title$: Observable<string>;

  constructor(private someService: SomeService) {}

  ngOnInit(): void {
     this.title$ = this.someService.getTranslateMenuItem('foobar');
  }
}

希望这有帮助!