Не удается получить img url из машинописного файла - PullRequest
0 голосов
/ 27 августа 2018

Я новичок в машинописи и веб-программировании в целом. Я делаю простое приложение на ионном языке, которое в качестве одной из функций будет иметь возможность показывать список зарегистрированных пользователей с фотографиями их профилей. Их фотографии профиля хранятся в хранилище Firebase.

Я успешно получаю URL-адреса к изображениям профиля, но когда я пытаюсь связать их с моим в моем html-файле, кажется, что он не работает. URL-адрес, который я получаю, действителен, когда я пытаюсь скопировать его в тег, он работает, но я хочу, чтобы он был динамическим.

файл registeredusers.html:

<ion-item *ngFor="let profile of profiles">
  <ion-avatar item-left> <ion-img [src]="profile.url"> </ion-img> </ion-avatar>
  <h2>{{profile.name}}</h2>
  <span>{{profile.country}}</span>
  <button ion-button (click)="followProfile(profile.name);" outline item-right>Follow</button>
</ion-item>

файл registeredusers.ts:

export class RegisteredusersPage {

    private profileListRef = this.db.list<Profile>('profile-list');
    constructor(
        public navCtrl: NavController, 
        public navParams: NavParams, 
        private storage: Storage,
        private db: AngularFireDatabase, 
        private toastCtrl: ToastController, 
        public angularFireAuth: AngularFireAuth
    ) {}

    profiles = [];
    firestore = firebase.storage();

    ionViewDidLoad() {
        console.log('ionViewDidLoad RegisteredusersPage');
        this.getProfile();
    }

    getProfile() {
        console.log(this.db.list('profile-list'));
        var database = firebase.database();
        var ref = database.ref("profile-list");
        ref.on('value', this.gotData.bind(this), this.errData.bind(this));
    }

    async gotData(data) {
        console.log(data.val());
        var profilesArr = data.val();
        var keys = Object.keys(profilesArr);
        var that = this;
        var array = [];
        console.log("profilesArr: " + profilesArr);
        for (var i = 0; i < keys.length; i++) {
            var k = keys[i];
            var profileName = profilesArr[k].name;
            var profileCountry = profilesArr[k].country;
            var profileEmail = profilesArr[k].email;
            let imageName = k + "__" + "profile";
            if (profileName && profileCountry && profileEmail && profilesArr[k].email != this.angularFireAuth.auth.currentUser.email) {
                const profileImageUrl = await this.firestore.ref().child(profileEmail + "/images/" + imageName).getDownloadURL();
                array[i] = profilesArr[k];
                profilesArr[k].url = profileImageUrl;
                if (profilesArr[k].email != this.angularFireAuth.auth.currentUser.email) {
                    this.profiles[i] = profilesArr[k];
                    console.log("profiles[i].url:" + this.profiles[i].url);
                }
            }
        }
        console.log(this.profiles);
    }

{{profile.name}} и {{profile.country}} внутри в порядке, а this.profiles [i] .url возвращает правильный URL, но я не могу ссылаться на него из HTML файл.

Любая помощь будет принята с благодарностью! Спасибо заранее!

РЕДАКТИРОВАТЬ: не уверен, если это имеет значение, но так выглядит моя страница this

Ответы [ 3 ]

0 голосов
/ 27 августа 2018
 <div class="body table-responsive">
    <table class="table-bordered table-striped" style="width:100%; padding: 10px;">
      <thead>
        <tr>
         <th style="width:10%">Image</th>
        </tr>
      <thead>
      <tbody>
       <tr *ngFor="let profile of profiles">
        <td>
         <img [src]="profile.url" class="img-circle">
        </td>
       </tr>
      </tbody>
    </table>
  </div>
0 голосов
/ 28 августа 2018

Исходя из ответа, который предоставил ahsan , все, что я сделал, это изменил тег на обычный, и теперь все работает хорошо.

Так что вместо

<ion-avatar item-left> <ion-img [src]="profile.url"> </ion-img> </ion-avatar>

Я сделал это так

<ion-avatar item-left> <img [src]="profile.url"> </ion-avatar>

Спасибо всем, кто внес свой вклад в решение моей проблемы!

0 голосов
/ 27 августа 2018

Вы можете включить класс DOMSanitizer.

constructor(
        public sanitizer: DomSanitizer) { }

В шаблоне:

<ion-img [src]="sanitizer.bypassSecurityTrustUrl(profile.url)"> </ion-img>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...