【发布时间】:2017-11-15 16:18:54
【问题描述】:
我有一个问题。我用离子框架开发移动应用程序。这是电影应用程序。我在 github 上找到了一个示例,并尝试在我的项目中实现一些功能和设计。
我有“商店”页面。当我启动项目时,我得到了错误
未捕获(承诺中):TypeError:无法读取未定义的属性“toUpperCase” TypeError:无法读取 Observable._subscribe 未定义的属性“toUpperCase”
它来自 ngOnInit 函数,但我看不出有什么问题。我最近才开始学习使用 ionic 框架、ts 和 angular 进行移动开发。我会很高兴得到任何帮助。
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { MovieService } from '../../services/movie-service';
import { MovieDetailsPage } from '../movie-details/movie-details';
@Component({
selector: 'page-store',
templateUrl: 'store.html'
})
export class StorePage {
movies: Array<any>;
constructor(public navCtrl: NavController, private movieService:
MovieService) {
}
ngOnInit(){
this.movieService.send('getMovies').subscribe(a => {
console.log(a);
this.movies = a.results.map(b => {
return {
id: b.id,
title: b.title,
image: b.poster_path,
overview: b.overview,
rating: b.vote_average
}
})
});
}
searchMovieDB(event, key) {
if(event.target.value.length > 2) {
this.movieService.searchMovies(event.target.value).subscribe(
data => {
this.movies = data.results;
console.log(data);
},
err => {
console.log(err);
},
() => console.log('Movie Search Complete')
);
}
}
itemTapped(event, movie) {
//console.log(movie);
this.movieService.send('getSingleMovie', movie.id).subscribe(data
=> console.log(data));
this.navCtrl.push(MovieDetailsPage, {
movie: movie
});
}
}
这是我用来创建 api 请求的“MovieService”:
import { Injectable } from '@angular/core';
import {Http, Headers, RequestMethod, Request} from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class MovieService {
constructor(private http:Http) {
}
searchMovies(movieName) {
var url = 'http://api.themoviedb.org/3/search/movie?query=&query=' +
encodeURI(movieName) + '&api_key=xxxxxxxxxxxxxxxxxx';
var response = this.http.get(url).map(res => res.json());
return response;
}
send(name, id?, item?) {
let url: string,
body: any,
api_key: string = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
if(name == 'getMovies')
url = 'http://api.themoviedb.org/3/movie/'+id+'?
api_key=' + api_key;
else if (name == 'getMoviesByPage')
url = 'http://api.themoviedb.org/3/movie/popular?
api_key='+api_key+'&page=' + id;
else if (name == 'getSingleMovie')
url = 'https://api.themoviedb.org/3/movie/'+id+'?
api_key=' + api_key;
else if (name == 'getVideo')
url = 'https://api.themoviedb.org/3/movie/'+id+'/videos?
api_key=' + api_key;
else if (name == 'getImages')
url = 'https://api.themoviedb.org/3/movie/'+id+'/images?
api_key=' + api_key;
let options = {
url: url,
body: null
};
if (item) {
body = typeof item === 'string' ? item :
JSON.stringify(item);
options.body = body;
}
return this.http.request(new Request(options))
.map(res => res.json())
}
}
【问题讨论】:
-
我认为那段代码不是受影响的。那里没有给
toUppderCase的电话。 -
你的控制台里还有其他东西吗?您是否尝试暂时删除此订阅?
-
你在哪里使用
toUpperCase?你能把那个sn-p也加进去吗? -
添加了页面和服务的完整ts代码。我没有使用“toUpperCase”,也不知道为什么会出现
-
可以添加
store.html的代码吗?
标签: angular typescript ionic-framework mobile