我从其中一个组件中获取了一个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() {}
}
答案 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);
}
}