javascript - 角/Java 脚本;模板在 HTTP 完成前初始化
问题描述
IP如何控制ngOnInit()中变量的初始化?
我有一个通过 Angular HTTPClient 和 get() 方法从服务器获取数据的服务。我然后我把数据拿来,想在博客组件中使用它。
我有 3 个单独的变量。所有博客,HeroBlog 和 PrimaryBlog。heroBlog 和 primaryBlog 在订阅方法之前执行。并且没有初始化,请看下面的代码
博客文章服务
import { Injectable} from '@angular/core';
import { Blog } from '../_interfaces/blog.model';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';
import { Subject} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class BlogPostService {
heroBlogSubject = new Subject <Blog> ();
primaryBlogSubject = new Subject <Blog> ();
blogPostsSubject = new Subject <Blog []>();
allBlogs:Blog [] = [];
constructor ( private httpClnt :HttpClient){}
//Get Blogs From Server
getBlogsFromServer (){
return this.httpClnt.get('https://bc-blog-86b3b.firebaseio.com/blogs.json').pipe(
map((response) => {
for (const key in response) {
if (response.hasOwnProperty(key)) {
this.allBlogs.push( {...response[key], blogKey:key});
}
}
this.heroBlogSubject.next(this.allBlogs[this.allBlogs.length-1]);
return this.allBlogs.reverse();
}));
}
}
博客文章组件
export class BlogComponent implements OnInit, OnDestroy{
blogs: Blog [];
heroBlog: Blog;
primaryBlog: Blog;
blogSubscription: Subscription;
dataRecived : boolean;
constructor(private blgServ: BlogPostService){
}
ngOnInit() {
this.blgServ.getBlogsFromServer().subscribe( (responseData)=>{
this.dataRecived = false;
this.heroBlog = responseData [0]
this.primaryBlog = responseData [1];
this.blogs = responseData;
this.dataRecived = true;
});
}
如您所见,我正在尝试在 Subscribe() 中分配 heroBlog 和 primaryBlog。但是,初始声明首先被执行,导致模板不显示 2 个博客并导致错误。
我应该如何在 ngOnit() 上实现/初始化这两个变量,或者如何确保我的所有属性都具有屏幕呈现的值?
解决方案
推荐阅读
- javascript - 在 Chrome Devtools 中调试 Javascript 时,遇到 DOM 断点后如何继续?
- machine-learning - BERT 掩码语言模型
- ffmpeg - "C compiler not found" 编译 NDK 代码 Mac
- arm - STM32 CMSIS FreeRTOS:从 ISR 释放 BinrarySemaphore 时触发 configASSERT
- python - 在同一个图形上绘制多个等高线图
- python - 如何将 .tsv 文件中的每个数组元素分别插入到 Postgresql 中?
- php - 从 SOAP/JSON 中提取值
- socket.io - 如何在tomcat中实现netty-socketio?
- c - 如何将结构中的一些信息打包到 2 字节缓冲区中?
- google-play-console - 如何处理短信/通话记录的谷歌控制台发布声明表