在 Angular JS 中使用服务无法返回范围值

using service in Angular JS cannot return the scope value

本文关键字:返回 范围 服务 Angular JS      更新时间:2023-09-26

我刚刚尝试在 Angular JS 中创建一个服务,它成功地调用函数 $http.get 并返回值。但是,该值不会插入到范围变量中。问:出了什么问题?

 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>

您没有正确使用异步getData方法。由于这是一个承诺对象,您应该使用其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
    });
}

在服务中返回承诺作为响应,在控制器中使用承诺成功回调将值分配给用户数据

 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;
      });
}