2014-09-14 3 views
1

Занятое строительство видео-сайта, и я в настоящее время переписываю код, но я не могу пройти мимо этой проблемы. Поэтому у меня есть controller.js, где я хочу выполнить весь запрос, и в моем main.js я хочу получать данные и разбираться.Angularjs pass data

Так что мой 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 ; 
    }); 
}); 

Моим вопрос, как я могу получить данные от моего контроллера .js в main.js, поэтому я могу разобрать его. Что я теперь получаю ошибку

TypeError: Cannot read property 'then' of undefined

Я не уверен, если это право инфраструктуры построить мое приложение, потому что в controller.js я хочу сделать несколько вызовов, например я хочу, чтобы получить бросок, фильмы, сериалы и т. д.

Controller.js будет выглядеть следующим образом (не знаю, если его правильный способ сделать это)

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 movieService – Frenck

+0

, который вы можете позвонить, как и сейчас, => Movie.findCast() –

+0

Спасибо, что я делаю. Когда я вхожу в функцию результата обещания 'console.log (item);' я получаю результаты, но когда я делаю 'Movie.findCast (person_id) .then (функция (результат) { $ scope.getCast = result; console .log (result); }); 'он не дает мне ничего неопределенного. – Frenck

0

Проблема заключается в том, что вы пытаетесь вызвать функцию обещание then, но ваша функция никогда не вернется к этому обещанию.

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

 Смежные вопросы

  • Нет связанных вопросов^_^