【问题标题】:Angularjs pass dataAngularjs 传递数据
【发布时间】:2014-11-08 00:59:12
【问题描述】:

忙于建立一个视频网站,我目前正在重写代码,但我无法解决这个问题。所以我有一个controller.js,我想在其中执行所有请求,在我的main.js 中我想接收数据并解析。

所以我的 controller.js 看起来像:

'use strict';
angular.module('Movie.services', []).service('Movie', ['$q', '$http', function($q, $http) {

    var API_URL = 'http://api.themoviedb.org/3/person/';
    var API_KEY = '?api_key=xxx';

    this.findCast = function( id ) {

        var cast = [];

        $http.get(API_URL, {         

            params: {
                query: id,
                api_key: API_KEY    
            }

        }).then(function(result) {
            angular.forEach(result.data, function(item) {
                cast.push(item);
            });
        });
    }
}]);

JSON:http://docs.themoviedb.apiary.io/reference/people/personid/get 我的 main.js 看起来像:

app.controller("Cast", function($scope, $http, $routeParams, Page, Movie) {
    $scope.getCast = [];
    var person_id = $routeParams.person_id;


    Movie.findCast(person_id).then(function(result){
        $scope.getCast = result ;
    });
});

我的问题是如何在 main.js 中从我的 controller.js 接收数据,以便我可以解析它。我现在得到的是一个错误

TypeError: 无法读取未定义的属性 'then'

我不确定这是否是构建我的应用程序的正确基础架构,因为在 controller.js 中我想进行多次调用,例如我想获取演员、电影、电视剧等。

Controller.js 会是这个样子(不知道是不是正确的做法)

this.findCast = function( id ) { }
this.getMovies = function( id ) { }
this.getSeries = function( id ) { }
this.getPopulair = function( id ) { }

【问题讨论】:

    标签: javascript angularjs imdb


    【解决方案1】:

    问题是你没有从你的服务中返回任何 Promise,然后你可以调用它。做这样的事情。

    'use strict';
    angular.module('Movie.services', []).service('Movie', ['$q', '$http', function($q, $http) {
    
    var movieService = {
        findCast : function( id ) {
            var API_URL = 'http://api.themoviedb.org/3/person/';
            var API_KEY = '?api_key=xxx';
            var cast = [];
    
            var promise = $http.get(API_URL, {         
                params: {
                    query: id,
                    api_key: API_KEY    
                }
            }).then(function(result) {
                angular.forEach(result.data, function(item) {
                    cast.push(item);
                });
                return cast;
            });
    
            return promise;
        },
        // getMovies : function(){}
        // similarly write other functions.
      }
      return movieService;
    }]);
    

    【讨论】:

    • 谢谢,但我如何在 main.js 中调用它?看到你添加了一个 var movieService
    • 你可以像现在一样调用 => Movie.findCast()
    • 谢谢我就是这么做的。当我登录承诺结果函数console.log(item); 时,我得到了结果,但是当我登录Movie.findCast(person_id).then(function(result){ $scope.getCast = result; console.log(result); }); 时,它没有给我任何未定义的结果
    • 对不起,做些小改动,写下'return cast'然后在服务中运行。我已经对上面的代码进行了更改。
    • 谢谢!当我运行上面的代码并登录到我的 main.js 时仍然很奇怪我得到[Object, 200, function, Object, "OK"] 我不能直接进入对象吗? i.imgur.com/0qIcDWY.png
    【解决方案2】:

    问题是,您正在尝试调用 promise 函数 then,但您的函数永远不会返回该 promise。

    this.findCast = function( id ) {
    
        var cast = [];
    
    // Added return
        return $http.get(API_URL, {         
    
            params: {
                query: id,
                api_key: API_KEY    
            }
    
        }).then(function(result) {
            angular.forEach(result.data, function(item) {
                cast.push(item);
            });
    //Returned cast, instead of whole response
            return cast;
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-30
      • 2018-05-17
      • 2021-04-03
      • 2019-10-05
      • 2018-10-12
      • 2023-04-08
      • 2020-02-14
      • 2016-04-28
      相关资源
      最近更新 更多