Ionic HTMLテンプレートのTypescriptモデルオブジェクトで関数を呼び出すにはどうすればよいですか?これを試みると、エラーself.context.$implicit.myFunctionName is not a function
が発生します。Typescriptのデータバインディングにオブジェクト関数を公開するIonic
Flickr APIの写真をIonic2アプリに表示したいとします。 Flickr写真へのURLを構築するには、APIレスポンスで提供されるいくつかのデータフィールドを連結し、目的の写真解像度を示す接尾辞を追加する必要があります。これは、Photo
モデルのgetUrl
関数で行われます。
のsrc /モデル/ photo.ts
export class Photo {
id: string;
owner: string;
secret: string;
server: string;
farm: number;
title: string;
url: string;
// Get the URL to the photo at the size specified by the suffix.
// s small square 75x75
// q large square 150x150
// t thumbnail, 100 on longest side
// m small, 240 on longest side
// n small, 320 on longest side
// - medium, 500 on longest side ... etc
getUrl(suffix: string) {
return 'https://farm' + this.farm +
'.staticflickr.com/' + this.server +
'/' + this.id + '_' + this.secret + '_' + suffix + '.jpg';
}
}
HTMLテンプレートは、返されたセット内の各写真をgetUrl('q')
を呼び出します。
のsrc /ページ/ photos.ts
import { Component } from '@angular/core';
import { Photo } from '../../models/photo';
import { FlickrService } from '../../services/flickr.service'
@Component({
selector: 'page-photos',
templateUrl: 'photos.html'
})
export class PhotosPage {
photos: Photo[];
constructor(private flickrService: FlickrService) {
// Get photos data from Flickr (this is working as expected)
flickrService.getPhotos().subscribe(photos => {
this.photos = photos;
});
}
}
サービス/
をflickr.service.ts:<div *ngFor="let photo of photos" class="photo-thumbnail">
<img [src]="photo.getUrl('q')" />
</div>
これは
Uncaught Error: Error in ./PhotosPage class PhotosPage - inline template:13:9 caused by: self.context.$implicit.getUrl is not a function
が
追加のコードはエラーになります
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import { Photo } from '../models/photo';
@Injectable()
export class FlickrService {
constructor(public http: Http){}
// Load the first 100 photos for a user (this is working as expected)
getPhotos(): Observable<Photo[]> {
return this.http.get('https://api.flickr.com/path/to/api/call')
.map(res => <Photo[]>res.json().photos.photo);
}
}
おかげ電工は、今私は活字体についてもう少し理解しています。ASPから来ます。Razor HTMLテンプレートのすべてのプロパティでオブジェクトにアクセスできるNET MVCのバックグラウンドは、同じ方法で動作するようにAngular/Typescriptを扱っていました。私は 'Photo'クラスをリファクタリングして、写真がロードされた後に' Photos'コンポーネントで設定したurl_qプロパティを持っていました。 'url_q'プロパティはJSONオブジェクトで利用可能になりました。理想的ではないが動作する。 – DragonFruit
それはあなたを助けてうれしいです。私はカミソリでMVCをやっていましたが、これは違うのです:( –