angular / javascript无法识别函数内的全局变量

时间:2015-03-05 22:22:00

标签: javascript angularjs

我做了一个服务,让我从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点我真的不明白。我已经测试过传入的数据是合法的。 如果我只是将数据分配给电影,那么我无法在该功能之外访问它。

1 个答案:

答案 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()强制上下文。