【问题标题】:Trouble with displaying images pulled in from JSON file无法显示从 JSON 文件中提取的图像
【发布时间】:2017-11-14 05:30:06
【问题描述】:

我对 ionic 和 angular 还是很陌生,我正在开发一个 pokedex 应用程序。当我在设置数据服务后尝试显示从 JSON 文件中提取的图像时,它会显示文件路径而不是实际图像。我不确定我做错了什么。有人可以帮忙吗?

这是来自 JSON 文件的 sn-p:

{
    "pocketMonsters": [

        {
            "pokemonName": "Bulbasaur",
            "pokedexNumber": "001",
            "description": "Bulbasaur can be seen napping in bright sunlight. There is a seed on its back. By soaking up the sun's rays, the seed grows progressively larger",
            "pokemonImage": "<img src='assets/imgs/bulbasaur.png' />"
        },

        {
            "pokemonName" : "Ivysaur",
            "pokedexNumber" : "002",
            "description" : "",
            "pokemonImage" : "<img src='assets/imgs/ivysaur.png' />"
        },

这是模板。除了我已经在这里的代码之外,我还尝试了 &lt;img src="pocketMonster.pokemonImage /&gt; 而不是 {{poketMonster.pokemonImage}} 并且在控制台中返回了 404 错误。

<ion-header>
  <ion-navbar>
    <ion-title>
      Pokedex
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content>

  <ion-list>
    <ion-item *ngFor="let pocketMonster of pocketMonsters;">
      {{pocketMonster.pokemonName}}
      {{pocketMonster.pokemonImage}}
    </ion-item>
   </ion-list>
  

  <!--<div *ngIf="pocketMonsters.length"></div> -->

</ion-content>

我将继续添加 home 组件和数据服务,以备不时之需。

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

import { pokemonDataService } from '../../providers/data/data';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})

export class HomePage {

  pocketMonsters = [];
  searchQuery: string = '';

  constructor(public navCtrl: NavController, public dataService: pokemonDataService) {

   
  }

  ionViewDidLoad() {
    
           
    
           this.dataService.getAllPokemon().then((data) => {
    
               data.map((pocketMonster) => {

                   this.pocketMonsters = data;
                   return pocketMonster;
                   
    
               });    
    
               console.log(this.pocketMonsters);
           });
           
       }

  //ngOnInit(){
    //this.dataService.getAllPokemon()
      //.subscribe(data => {
        //this.pokemonList = data;
    //});
  //}

  

}

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/map';



@Injectable()
export class pokemonDataService {
 
    data: any;
 
    constructor(public http: Http) {
 
    }

    getAllPokemon() {
      if(this.data){
        return Promise.resolve(this.data);
    }

    return new Promise(resolve => {

        this.http.get('assets/data/pokemon.json').map(res => res.json()).subscribe(data => {
            this.data = data.pocketMonsters;
            resolve(this.data);
        });

    });
      }
 
    
 
}

【问题讨论】:

  • 尝试使用
  • @JoeWu 他会使用&lt;span [innerHTML]="pocketMonster.pokemonImage"&gt;&lt;/span&gt;,但他真的不应该。

标签: angular typescript ionic-framework


【解决方案1】:

试试这个方法:

  <ion-list>
    <ion-item *ngFor="let pocketMonster of pocketMonsters;">
      {{pocketMonster.pokemonName}}
      <img src="{{pocketMonster.pokemonImage}}">
    </ion-item>
   </ion-list>

alternatively

  <ion-list>
    <ion-item *ngFor="let pocketMonster of pocketMonsters;">
      {{pocketMonster.pokemonName}}
      <img [src]="pocketMonster.pokemonImage">
    </ion-item>
   </ion-list>

在您的数据中,不要放置预制标签,只放置资产:

    {
        "pokemonName" : "Ivysaur",
        "pokedexNumber" : "002",
        "description" : "",
        "pokemonImage" : "assets/imgs/ivysaur.png"
    },

这是假设您的图像位于该位置。

另请参阅here,但在您的情况下,没有充分的理由包含 HTML sn-ps。

在我看来,至少在大多数情况下,这也是一种不好的做法。

【讨论】:

  • 我从我的数据中取出了预制标签,并把它变成了资产。 第一种方法对我不起作用。它在控制台中给出了 404 错误。但是使用 [src] 的第二种方法做到了。我不确定为什么第一种方法不起作用,但非常感谢您的帮助!
【解决方案2】:

如果你这样存储数据:

    {
        "pokemonName": "Bulbasaur",
        "pokedexNumber": "001",
        "description": "Bulbasaur can be seen napping in bright sunlight. There is a seed on its back. By soaking up the sun's rays, the seed grows progressively larger",
        "pokemonImage": "<img src='assets/imgs/bulbasaur.png' />"
    },

您应该使用 innerHtml 来显示您的图片:

<span innerHTML="{{pocketMonster.pokemonImage}}"></span>

希望对您有所帮助,但首先您应该注意@bgse 的回答。

【讨论】:

  • 我试过这个,但没有用,我不知道为什么。但我按照@bgse 的建议做了,并从数据中取出预制标签,将其设为“assets/imgs/bulbasaur.png”,然后使用他建议的第二种方法并且有效。
猜你喜欢
  • 2019-08-21
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 2017-03-29
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多