2015-01-16 25 views
1

我剛試圖在Angular JS中創建一個服務,它成功地調用函數$ http.get並返回值。但是該值不會插入到範圍變量中。 問題:什麼是錯的?在Angular JS中使用服務無法返回範圍值

angular.module('starter.controllers', []) 
.factory('UserService', function($http) { 
var data; 
     return{ 
      getData: function($http) { 
       return $http.get('http://www.website.com/call12'). 
        success(function(response) { 
        /// console.log(JSON.stringify(response)); 
         userData=response.data; 
          return userData; 

        }).error(function(data, status, headers, config) { 
        // log error 
        }); 

      } 
    } 
}) 


.controller('AppCtrl', function($scope, $ionicModal, $interval,$http,$rootScope,UserService) { 

$scope.formData={}; 
$scope.userData={}; 

$scope.myCtrl= function(UserService,$http,$rootScope) { 

    UserService.getData($http).then(function(data,$rootScope) { 
$scope.userData = data; 

$scope.fullName = data.name; 
$scope.balance = data.balance; 

    }} 

    $scope.formData.playerName= $scope.userData.name; // $scope.userData is undefined 

$scope.myCtrl(UserService,$http); 
}) 

模板

<form ng-submit="submit_editpw()" ng-controller="AppCtrl"> 
<pre>userData : {{userData}}</pre> //retuns data 
<pre>name: {{fullName}}</pre> //returns empty 
</form> 

回答

2

您沒有使用異步getData方法正確。由於這是一個promise object你應該使用其then方法:

UserService.getData().then(function(data) { 
    $scope.userData = data; 
}); 

還要確保getData返回一個承諾:

getData: function() { 
    return $http.get('http://m.sepakbola.cc/index.php/id/user/call12').success(function (response) { 
     userData = response.data; 
     return userData; 
    }).error(function (data, status, headers, config) { 
     // log error 
    }); 
} 
+0

嗨。我得到錯誤。 類型錯誤:UserService.getData(...)是未定義 腳本: 'UserService.getData(),然後(函數(數據){$ = scope.userData數據; });' – xyonme

+0

確保'getData'返回promise:返回'$ http.get(...)'。 – dfsq

+0

嗨@dfsq我得到問題,當我嘗試獲取服務變量值。你可以幫我嗎? 例如 '$ scope.fullName = data.name; ''// fullName仍爲空' 函數外 '$ scope.formData.playerName = $ scope.userData.name; '// $ scope.userData is undefined' – xyonme

0

在服務回報承諾作爲響應,並在控制器中使用打包票回調賦值給用戶數據

angular.module('starter.controllers', []) 
.factory('UserService', function($http) { 
var data; 
     return{ 
      getData: function() { 
        return $http.get('http://www.website123.com/call12'); 
      } 
    } 
}) 


.controller('AppCtrl', function($scope, $ionicModal, interval,$http,$rootScope,UserService) { 
     $scope.myCtrl= function(UserService,$http) { 
     $scope.userData={}; 

     UserService.getData().success(function(reponse) { 
      $scope.userData=response.data; 
     }); 

}