我正在开发一个读取Feed的基本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很新。我看到了另一个类似的话题,但我无法解决我的问题。
答案 0 :(得分:1)
当第一个 $ digest 周期被触发时,您的{{loadFeed()}}表达式会被评估。这会产生对你的函数parseFeed的调用,它使用$ http。现在,这就是你的问题的原因,Angular在通过$ http的ajax请求中做的最后一件事就是调用 $ rootScope。$ apply()。这会触发另一个$ digest周期,这会导致你的表达式再次被评估,这会触发另一个$ rootScope。$ apply(),你已经可以在这里看到无限循环了。