arrays - 从 json 而不是 Array Angular 5 中获取数据
问题描述
您好,我是 Angular 的新手,我正在 Angular 5 中制作一个应用程序来显示带有与图像相关的信息的图像,该应用程序有一个缩略图页面,当您单击时,您可以看到带有描述或视频的图像,我m 从服务和服务内部的数组中获取所有数据,但我需要更改,而不是从数组中获取数据,我需要从 json 中获取数据,但保留我已经拥有的所有功能。但是当我从 json 中获取数据时,我点击时看不到图像的信息。
这是我需要为 json 更改的数组的服务
export class ArticulosService {
enter code here @Injectable()
export class ArticulosService {
constructor(private http: HttpClient) {}
visibleImages = [];
private url: string = '../assets/data/articulos.json';
getImages() {
return this.visibleImages = IMAGES.slice(0);
}
getImage(id: number) {
return IMAGES.slice(0).find(image => image.id === id);
}
}
const IMAGES = [
{..this is the array..} ];
这是带有图像缩略图的组件,您可以在此处查看 IMAGES 数组中的所有缩略图
export class HomeComponent implements OnChanges {
images: any[];
visibleImages: any[] = [];
constructor(private articulosService: ArticulosService) {
this.visibleImages = this.articulosService.getImages();
}
ngOnChanges() {
this.visibleImages = this.articulosService.getImages();
}
}
这是您看到图像标题等的图像页面组件。
export class TutorialPostsComponent implements OnInit {
image:any
visibleImages: any[] = [];
constructor(private articulosService: ArticulosService, private route:
ActivatedRoute) {
this.visibleImages = this.articulosService.getImages();
}
ngOnInit() {
this.image = this.articulosService.getImage(
+this.route.snapshot.params['id']
);
}
}
在这里,我将服务从 JSON 而不是硬编码的数组更改为 fethc
export class ArticulosService {
private _url: string = '../assets/data/articulos.json';
constructor(private _http: HttpClient) {}
getImages(): Observable<TutoGaleria[]> {
return this._http.get<TutoGaleria[]>(this._url)
}
}
我可以在缩略图中看到数据,但是当我使用数组时,这些数据没有传递给图像细节。
我认为与 getImage(id: number) 函数有关我不知道如何从 json 获取这部分
如何使用 json 执行相同的功能?谢谢你。
解决方案
问题是,您返回的是一个数组,但您现在返回的是一个Observable。
这是一种不同类型的数据,也是一个完整的编程范式:您现在不是传递对象,而是传递需要处理的“事件”。
该 this.visibleImages = this.articulosService.getImages();
行现在的工作方式与您预期的不同,因为您不会获得所需的对象,而是Observable引用,它将在未来为您提供结果。
要理解这一点,我真的建议您阅读链接教程。您的解决方案将是这样的:
const getImagesSubscription = this.articulosService.getImages().subscribe(
(response) => {this.visibleImages = response;},
(error) => { << handle errors here >> },
() => { << complete event here >> });
推荐阅读
- java - 添加后如何对数字进行四舍五入以避免不必要的数字
- mysql - 如何使用mysql从到期条目中获取待处理的月份
- c++ - 如何在一个循环中分离两个不同的数组?
- c# - 为什么我的项目中出现 Newtonsoft.Json.JsonConvert 的 CS0433 错误?
- twig - 如何打印组 ID
- android - 如何使片段等待Android Kotlin中的当前位置
- entity-framework-core - 无法使用 EF Core 3.0 CosmosDb 提供程序连接到 Azure Cosmos Db 帐户(Core SQL API)
- kubernetes - 如何使用部署在 Kubernetes 上的服务的延迟来扩展部署?
- jquery - css3 旋转动画——开始旋转,然后停在帧上
- c++11 - 如何更改元组中对象的值?