2015-06-20 90 views
0

我正在使用服務從服務器使用$http.get()方法獲取數據。我正在調用服務中的函數,然後從控制器訪問它的變量。但它不是這樣工作的。 該代碼是下面Angular JS - 服務不工作

'use strict'; 

var mission_vision_mod = angular.module('myApp.mission_vision', ['ngRoute']); 

mission_vision_mod.config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/mission_vision', { 
    templateUrl: 'partials/mission_vision/mission_vision.html', 
    controller: 'mission_visionCtrl' 
    }); 
}]); 

mission_vision_mod.controller('mission_visionCtrl', ['$scope','getMissionData','$http', function($scope, $http, getMissionData) { 
     $scope.visiontext = "Here is the content of vision"; 
     getMissionData.getmissiondata(); 
     $scope.missions = getMissionData.missiondata; 
     $scope.len = $scope.missions.length; 
}]); 

mission_vision_mod.service('getMissionData', ['$rootScope','$http', function($rootScope, $http){ 
     var missiondata; 
     function getmissiondata(){ 
      $http.get('m_id.json').success(function(data){ 
      missiondata = data; 
     }); 
     } 
}]); 

當我寫在控制器本身的$http.get()功能,它的工作原理。我是角JS的新手。

回答

1

嘗試在控制器這樣寫你的服務這樣

mission_vision_mod.service('getMissionData', ['$rootScope','$http', function($rootScope, $http){ 
    this.getMissionData=function(){ 
     return $http.get('m_id.json'); 
    } 
}]); 

使用服務:

mission_vision_mod.controller('mission_visionCtrl', ['$scope','getMissionData','$http', function($scope,getMissionData,$http) { 
    $scope.visiontext = "Here is the content of vision"; 
    getMissionData.getMissionData().success(function(response){ 
     $scope.missions=response; 
     $scope.len = $scope.missions.length; 
    }).error(function(errorl){ 
     //handle error here 
    }); 

}]); 

此外,我建議使用一個更好的名字服務-'MissionDataService':)

編輯 - 您的注入服務序列應該與陣列中指定的可注射名稱序列相匹配。請參閱我的上次編輯

1
 ['$scope','getMissionData','$http', 
function($scope, $http,   getMissionData 

服務名稱與變量名稱不匹配。

我的建議:停止使用這個數組表示法。它混淆了代碼,並且是錯誤的常見來源。使用ng-annotate

也就是說,您的服務沒有正確定義。它沒有任何會允許它被調用的成員函數。重新閱讀服務的文檔。使用factory()定義服務比使用service(),BTW定義服務更容易。並且服務應該返回返回由$ http返回的許諾。嘗試在進行異步調用後訪問由異步調用返回的值將無法工作。閱讀http://blog.ninja-squad.com/2015/05/28/angularjs-promises/

+0

但即使更改服務名稱的順序,它也不起作用。我希望我做對了......我把它改爲'['$ scope','$ http','getMissionData', function($ scope,$ http,getMissionData' –

+0

閱讀我的答案的其餘部分。 –

0

嘗試:

mission_vision_mod.service('getMissionData', ['$rootScope','$http', function($rootScope, $http){ 
      var missiondata; 
      function getmissiondata(){ 
       $http.get('m_id.json').success(function(data){ 
       missiondata = data; 
       return missiondata; 
      }); 
      } 

}]);