【问题标题】:Angular ajax working only with $timeout in directiveAngular ajax 仅在指令中使用 $timeout
【发布时间】:2015-01-10 08:59:28
【问题描述】:

我有一个发出 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);
        }
    };

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

【问题讨论】:

  • 除非我遗漏了什么,否则它应该可以工作。您尚未发布的代码中还有其他内容。
  • 好吧,事实上有很多指令 (5-6) 也会发出 ajax 请求。你认为它会影响正常数据流的行为吗?
  • 我不知道你所说的“正常数据流”是什么意思。您在控制台中看到任何错误吗?顺便说一句,这是你的 code 为说明目的而调整的有效。
  • 好吧,你可能是对的。我的问题应该出在其他地方。
  • 您应该修改问题或更好地删除问题,然后创建一个新问题以更好地隔离问题。

标签: angularjs angular-directive


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    相关资源
    最近更新 更多