2016-10-13 16 views
0

私はAngularJSでプロジェクトビルドしており、配列で応答するapiにhttp getリクエストを行います。AngularJSとPromise

問題は応答に私に約束があり、必要な配列ではないということです。
スコープに割り当てようとすると、定義されません。

これは、工場出荷時のコードです:

angular.module('app') 

.factory('utils', function($rootScope, $translate, $state, $sce, $http) { 
    return { 
     settings: {}, 
     getLanguages: function(){ 

      var _url = $rootScope.baseUrl+'/languages'; 
      var lang = $http({ 
       withCredentials: false, 
       url: _url, 
       method: "GET", 
       headers: { 'Content-Type': undefined }, 
       transformRequest: angular.identity 
      }); 

      return lang; 
     } 
    }; 
}); 

これは、ディレクティブコードです:

angular.module('app').directive('leftPanel', function($rootScope, player, search, users, utils) { 
    return { 
     restrict: 'E', 
     templateUrl: 'assets/views/directives/left-panel.html', 
     replace: true, 
     scope: true, 
     link: function($scope, el) { 
      var searchBar = el.find('input'); 

      $scope.player = player; 
      $scope.search = search; 
      $scope.users = users; 

      utils.getLanguages().then(
       function(answer){ 
        $scope.languages = answer.data; 
       } 
      ); 

      console.log($scope.languages); 

      searchBar.on('focus', function() { 
       if (search.query || search.results.length) { 
        search.showPanel(); 
       } 
      }); 

      if ($rootScope.isPhone) { 
       $rootScope.$on('$stateChangeStart', function() { 
        el.addClass('closed'); 
       }); 
      } 
     } 
    }; 
}); 

問題は、私は私が思うundefined

+0

'$ http.get(url、data)' – Weedoze

+0

私はあなたに質問を編集しました。今はうまくいくはずです。約束を追加 – Ved

+1

@Ved質問を編集しないでください。あなたの答えを加えてください。 「それで」を追加するだけではうまくいかないので、私は「不定」 –

答えて

0

を取得

utils.getLanguages().then(
       function(answer){ 
        $scope.languages = answer.data; 
       } 
      ); 

      console.log($scope.languages); 

でありますそれとl console.log($ scope.language)はあなたに未定義を示します。これは、utils.getLanguages()が非同期呼び出しであり、コントロールがただちにそれ以上に転送されるためです。 $ timeoutを1秒間追加すると、スコープ変数に遅れが生じることがあります。

関連する問題