如何使用角度中的`rxjs`从服务创建observable

时间:2018-04-26 11:24:57

标签: angular rxjs

我从其中一个组件中获取了一个serer值。该组件来自后端。一旦它完成了它的发送服务。

来自页脚组件的

我从服务中获取数据。如果我将其显示的值设置为undefined。如果我使用setTimeout如下,则可行。

import { Component, OnInit, Input } from '@angular/core';
import { StorageService } from '../shared/service/storage.service';


@Component({
  selector: 'app-footer',
  templateUrl: './footer.component.html',
  styleUrls: ['./footer.component.scss']
})
export class FooterComponent implements OnInit {

    constructor(private storage:StorageService) {
        setTimeout(()=> console.log( this.storage.socialNetworks ), 1000 ); //how to achive the same using Observable?
    }

    ngOnInit() {}

}

1 个答案:

答案 0 :(得分:1)

没有看到代码的正确示例(包括StorageService是什么),这很难。

(有关您的信息,可以将其设置为更多 smart ,将数据存储在服务中的behaviorSubject中,和/或共享订阅以防止重复的AJAX请求(如果这是被多次订阅))。

但这是一般模式:

@Injectable()
export class TokenService {

    private apiBaseUrl = ''; // <- some url here.

    loadSocialNetworks(): Observable<any> {
        const myEndpoint = 'socialNetworks'; // <- user correct endpoint name
        return this.http.get(`apiBaseUrl${myEndpoint}`)
            .map((response) => response.json());
    }

    // ....other code
}

@Component({
  selector: 'app-footer',
  templateUrl: './footer.component.html',
  styleUrls: ['./footer.component.scss']
})
export class FooterComponent implements OnInit {

    socialNetworks: any;

    constructor(private storage:StorageService) {}

    ngOnInit() {
        this.storage.loadSocialNetworks()
            .subscribe((socialNetworks) => this.socialNetworks);
    }

}