我做了一个服务,让我从omdb api获取电影信息,但当我试图从我的控制器使用它并将结果推送到我的电影数组时,它抱怨
TypeError:无法读取未定义
的属性'push'
.controller('AppCtrl', function(omdbApi) {
this.movie = [];
this.getMovie = function(title, year) {
year = typeof year === 'undefined' ? "" : year;
omdbApi.getMovie(title, year).then(function(data){
this.movie.push({
poster: data.data.Poster,
title: data.data.Title,
actors: data.data.Actors,
plot: data.data.Plot
});
});
}
});
有人可以解释为什么无法推送电影吗?我不确定它是一个角度问题,但从javascript点我真的不明白。我已经测试过传入的数据是合法的。 如果我只是将数据分配给电影,那么我无法在该功能之外访问它。
答案 0 :(得分:1)
这是一个常见的错误。 this
回调中的.then()
对象并未引用.controller()
回调的同一对象。使用闭包:
.controller('AppCtrl', function(omdbApi) {
var self = this; // <---- this is the key
this.movie = [];
this.getMovie = function(title, year) {
year = typeof year === 'undefined' ? "" : year;
omdbApi.getMovie(title, year).then(function(data){
self.movie.push({
poster: data.data.Poster,
title: data.data.Title,
actors: data.data.Actors,
plot: data.data.Plot
});
});
}
});
另一个选择是使用Function.prototype.bind()
强制上下文。