【问题标题】:angular 10 $digest() iterations reached角 10 $digest() 迭代达到
【发布时间】:2024-01-16 05:09:01
【问题描述】:

我关注thinkster MEAN 堆栈教程,但在角度工厂服务中遇到问题

angular.js:11598 错误:[$rootScope:infdig] 10 $digest() 迭代 到达。中止!在最后 5 次迭代中触发的观察者:[]

app.js

app.factory('posts', ['$http', function($http){
    var o = {
        posts: []
    };
    o.getAll = function() {
        return $http.get('/posts').success(function(data){
            console.log(data)
            angular.copy(data, o.posts);
        });
    };
    return o;
}]);

我的配置文件有路由提供者

$stateProvider
    .state('home', {
        url: '/home',
        templateUrl: '/home.html',
        controller: 'MainCtrl',
        resolve: {
            post: ['$stateParams', 'posts', function($stateParams, posts) {
                return posts.get($stateParams.id);
            }]
        }

    })

我不知道出了什么问题..

非常感谢任何帮助。提前谢谢...

【问题讨论】:

  • 你能看看这个答案吗,可能你的模板逻辑有问题? 10 $digest error
  • posts factory 中缺少方法 .get()。你把.get().getAll() 混在一起了——请仔细阅读教程。
  • 能否请您提供更多信息或您使用的代码?从上面的代码中看不到任何潜在的问题,$digest error 主要发生在指令或 html 模板中的$watchers

标签: javascript angularjs


【解决方案1】:

.success已弃用,所以我将使用then

我想这就是你想要写的。

app.factory('posts', ['$http', function($http){
    var o = {}; 
    o.get = function(id){
        return $http.get('/posts/'+id).then(function(response){
            return response.data;
        });
    }
    o.getAll = function() {
        return $http.get('/posts').then(function(response){
           return response.data;
        });
    };
    return o;
}]);


 resolve: {
        post: ['$stateParams', 'posts', function($stateParams, posts) {
            return posts.get($stateParams.id);
        }]
    }

// usage of the factory in controller : 
    posts.getAll().then(function(posts){
         $scope.allPosts = posts;
    })
    posts.get(id).then(function(post){
        $scope.post = post;
    })

几点:

  1. then/ success是可链接的;但是,您必须使用 return 语句才能使下一个链拥有数据。我会得到你归还的东西。
  2. 我完全不知道你的return posts.get($stateParams.id); 是从哪里得到的,所以我添加了一些相关的内容。

【讨论】: