在控制器中使用工厂返回undefined

时间:2016-10-29 15:51:43

标签: javascript angularjs promise angular-promise angularjs-http

我正在尝试使用ng-click中的函数将我的视图中的值发送到控制器,然后使用该值将其传递给我的工厂,该工具将从rest api链接中提取数据,但是值im发送返回没有错误,这是我的代码

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, idService) {
    $scope.getSo = function (id){
        $scope.myIDs = idService.getID(id); 
    };
});
app.factory('idService', function($http,$q) {
    var oGetID = {};
    oGetID.getID = function(id) {
         var deferred = $q.defer();
        $http.get('http://citysdk.dmci.hva.nl/CitySDK/pois/'+id).then(function(response){

             deferred.resolve(response.data);
     });
    return deferred.promise;
    };
    return oGetID;
});

</script>
</head>
<body>
   <div ng-app="myApp" ng-controller="myCtrl">
        <a href="#" ng-click ="getSo('52527290c5cddb0a7cb654ca');">send variable</a>
        {{myIDs.location.address.value}}
   </div>
</body>
</html>

这是回复enter image description here

的控制台结果

1 个答案:

答案 0 :(得分:1)

异步调用并不像您期望的那样工作。然后异步发生并返回基于API服务器调用的数据。 ajax成功后,你应该期望通过将.then放在它上面来获得价值。内部$http方法返回promise

idService.getID(id).then(function(response){
   alert(response);
   $scope.myIDs = response;
})