2017-02-02 4 views
0

Я использую услугу для $ http.get моего объекта, а затем передаю его моему контроллеру.Не удается передать объект от углового обслуживания до контроллера

Когда я загружаю веб-страницу и использую инструменты для разработчиков F12, пользовательский сервис (getService) отлично работает, чтобы получить объект данных и сохранить его в переменной responseObj.Announcement. Я могу использовать Chrome для просмотра области и просмотра моего объекта. Я не могу передать этот объект в мой контроллер

  • Есть ли проблема с одним из моих методов в любой службе или контроллер?

Я был вверх и вниз stackOverflow ищет похожие ситуации, но я в тупике.

GetService



    class getService { 
     static $inject = ["$http", "$window"] 
     baseUrl: string = ConfigB.BaseAPIUrl; 


     urlObject = { 
      Announcement: "Announcement", 
     }; 

     responseObj = { 
      Announcement :[], 

     }; 

     constructor(
      public $http: any, 
      private $window: any 
     ) { } 



     // method utilizing generic promise object for announcements controller 
     public getAnnouncements() 
     { 
      this.getRequest(this.baseUrl + this.urlObject.Announcement, "Announcement"); 

     } 

     public passData() 
     { 
      return this.responseObj.Announcement; 
     } 


     //Generic angular $http promise object 
     private getRequest(url: string, responseType:string) 
     { 


      this.$http.get(url) 
       .then((response) => 
       { 
        this.responseObj[responseType] = response.data; 

       }, 
       function (data) { 
        this.$window.alert("Error: " + data); 
       }); 
     } 
    } 
    angular.module('App').service("getService", getService); 

**My Controller:** 

<pre><code> 

class announcementController { 
    static $inject = ["$rootScope", "$scope", "$window", "getService" ]; 

    Announcement: any = [ 
     { Message: "test" } 
    ]; 
    constructor(
     public $rootScope: any, 
     public $scope: any, 
     private $window: any, 
     private getService: any) 
    { 

    } 

    public getAnnouncements() { 

     this.getService.getAnnouncements() 


    } 

    public setAnnouncements() { 
     this.Announcement = this.getService.passData(); 
    } 

    init() { 
     this.getAnnouncements(); 
     this.setAnnouncements(); 
    }  
} 
angular.module('App').controller("announcementController", announcementController); 

+0

Это не выглядит, как вы ждете GetRequest(), чтобы закончить перед запуском GetService. PassData(). –

ответ

1

Вам нужно ждать $ HTTP обещают решить перед запуском setAnnouncements(). Вы можете сделать это, передав обещание, что $ http вернется, а затем извлечение ваших данных из контроллера после его завершения.

В вашей службе:

public getAnnouncements() 
{ 
    return this.getRequest(this.baseUrl + this.urlObject.Announcement, "Announcement"); 
} 

private getRequest(url: string, responseType:string) 
{ 
    return this.$http.get(url) 
    ... 

В контроллере:

public getAnnouncements() { 
    return this.getService.getAnnouncements(); 
} 

init() { 
    this.getAnnouncements().then(() => { 
     this.setAnnouncements(); 
    }); 
} 

Example JSBin

+0

Джеймс, ты решил мою проблему и научил меня больше о обещаниях. Спасибо огромное! – Jake

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