Angular ajax仅在指令中使用$ timeout

时间:2015-01-10 08:59:29

标签: angularjs angular-directive

我有一个发出ajax请求的指令。 直到我把它包装在像这里的$ timeout中一样,它才能工作:

return {
        restrict: 'E',
        scope : {
            param1: '=',
            param2: '='
        },
        templateUrl: "teams/views/myDirective.html",
        link: function($scope){
            $timeout(function(){
                $http.get(endPointUrl)
                    .success(function(result){
                        console.log(result)
                    })
                    .error(function(err){
                        console.log(err);
                    });
            }, 0);
        }
    };

有人知道为什么吗? 提前谢谢你的答案!

1 个答案:

答案 0 :(得分:1)

$http调用只返回承诺。 以下代码可以帮助您。 理想情况下,像操作一样获取数据应该在服务中而不是指令的链接函数中完成。

app.service('myService', ['$http',
  function($http) {
    this.getData = function() {
      return $http({
        method: 'GET',
        url: 'http://httpbin.org/get',
        headers: {
          'Content-Type': "application/json"
        }
      }).
      success(function(data, status) {
        return data;
      }).
      error(function(data, status) {
        return "Request Failed";
      });

    }
  }
]);

app.directive('appDirective', ['myService',
  function(myService) {
    return {
      link: function($scope) {
        myService.getData().then(function(data) {
          $scope.name = 'User, Data fetched as: ' + JSON.stringify(data);
        })
      }

    }
  }
])

工作示例:http://plnkr.co/edit/stdJxAnHINORI06pPZJX?p=preview