2015-06-20 91 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; 
      }); 
      } 

}]);