2014-09-14 11 views
1

바쁜 비디오 웹 사이트를 구축 중이며 현재 코드를 다시 작성하고 있지만이 문제는 해결할 수 없습니다. 그래서 나는 컨트롤러를 가지고 있습니다 .js는 모든 요청을하고 main.js에서 데이터를 받고 파싱을 원합니다.Angularjs가 데이터를 전달합니다.

그래서 내 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 : 난 내 컨트롤러에서 데이터를 수신 할 수있는 방법을 내 질문은

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 ; 
    }); 
}); 

: 같은 http://docs.themoviedb.apiary.io/reference/people/personid/get 그리고 내 main.js 보인다 main.js .js 그래서 그것을 구문 분석 할 수 있습니다. 내가 뭘 이제 얻을 것은, 때문에 내가 캐스팅 싶어 예를 들어 여러 통화를 할 controller.js이 내 응용 프로그램을 구축 할 수있는 권리 인프라 경우 잘 모르겠어요 오류

TypeError: Cannot read property 'then' of undefined

입니다 영화, TV 시리즈 등등.

Controller.js, 당신은 약속 기능 then 호출하려고하는 것이 문제가

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

답변

1

문제는 귀하가 전화를 걸 수있는 서비스에서 약속을 반환하지 않는다는 것입니다. 이런 식으로하십시오.

'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; 
}]); 
+0

감사합니다.하지만 어떻게 내 main.js에서 이것을 호출합니까? 당신이 var movie를 추가했다는 것을 보았습니다. – Frenck

+0

당신은 = Movie.findCast()를 호출 할 수 있습니다. –

+0

감사합니다. promise 결과 함수'console.log (item);에 로그인 할 때'결과를 얻지 만,'Movie.findCast (person_id) .then (function (result) { $ scope.getCast = result; console .log (result); }); 그것은 나에게 정의되지 않은 것을주지 않습니다. – Frenck

0

(그 올바른 방법으로 그것을 할 경우 모르는)과 같이 표시됩니다하지만 함수 그 약속을 결코 반환하지 않습니다.

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; 
    }); 
}