用Angular表达式绑定Ajax调用的无限循环

Infinite loop with Angular expression binding with Ajax call

本文关键字:调用 无限循环 Ajax 绑定 Angular 表达式      更新时间:2023-09-26

我正在开发一个基本的Angular应用程序,它可以读取提要。

在index。html中返回控制器点击这个按钮得到的值

<button ng-click="loadFeed()">Load News</button>

问题是如果我尝试这样做:

{{loadFeed()}}

进入不定式循环。

Controllers.js:

myApp.controller("FeedCtrl", ['$scope','FeedService', function ($scope,Feed) {    
$scope.feedSrc = "http://rss.cnn.com/rss/cnn_topstories.rss";
$scope.loadFeed=function(){        
    Feed.parseFeed($scope.feedSrc).then(function(res){
        $scope.feeds=res.data.responseData.feed.entries;
    });
}
}]);
myApp.factory('FeedService',['$http',function($http){
return {
    parseFeed : function(url){
        return $http.jsonp('//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=50&callback=JSON_CALLBACK&q=' + encodeURIComponent(url));
    }
}
}]);

我很抱歉,我对AngularJS很陌生。我看到了另一个类似的主题,但我无法解决我的问题。

当第一个$digest循环被触发时,您的{{loadFeed()}}表达式被求值。这将产生对函数parseFeed的调用,该函数使用$http。现在,这是你的问题的原因,Angular通过$http在ajax请求中做的最后一件事是调用$rootScope.$apply()。这会触发另一个$digest循环,使表达式再次求值,从而触发另一个$rootScope.$apply(),您已经可以看到这里正在进行无限循环。