微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs – 发送$http.get两次

编辑1:伙计,我注意到我在认证工厂里调用$http.get(‘/ posts’)(用于某些特殊目的).对不起,这个愚蠢的问题.赏金结束时我会删除它.

我有以下代码来加载页面https:// localhost:3000 /#/ home,它从数据库获取所有帖子并显示它们.

问题是,我意识到日志router.get / posts是打印两次,而这里和那里只有一次警告.

有人知道这是否意味着$http.get进行两次?如果是,问题在哪里?

app.config(... ...) {
    $stateProvider
        .state('global',{
            templateUrl: '/htmls/global.html',controller: 'GlobalCtrl'
        })
        .state('global.home',{
            url: '/home',templateUrl: '/htmls/home.html',controller: 'MainCtrl',resolve: {
                postPromise: ['posts',function (posts) {
                    return posts.getAll();
                }]
            }
        });
}]);

app.factory('posts',['$http','auth',function ($http,auth) {
    var o = { posts: [] };

    o.getAll = function () {
        alert("before");
        return $http.get('/posts').then(function (res) {
            alert("after");
            angular.copy(res.data,o.posts);
        })
    }
    ... ...
}]);

app.controller('GlobalCtrl',[function () { }]);

app.controller('MainCtrl',['$scope','posts','postPromise',function ($scope,posts,auth,postPromise) {
    ... ...

在后端:

router.get('/posts',function (req,res,next) {
    console.log("router.get /posts");
    Post.find(function (err,posts) {
        if (err) return next(err);
        res.json(posts);
    });
});

PS:我刚刚意识到一件事:我在网站上设置了一个登录和注销.当我没有登录时,https:// localhost:3000 /#/ home只显示一次router.get / posts;当我登录时会出现问题.

因为你说当你记录的时候出现问题,这是因为你使用角ui路由器这两个事件非常重要.
$stataChangeStart(...),and $stateChangeSuccesss(...)

请注意您正在使用的解决方

.state('global.home',function (posts) {
                    return posts.getAll();
                }]
            }
        })

跳转发生在目标网址之前首先解决,然后视图被更改/更新.

一个解决方案是:

请确保你有’&&’条件要在这里检查,因为您尝试先登录,然后获取数据.

如果您使用的是角式ui路由器版本0.12,请升级版本,以解决问题.谢谢.

原文地址:https://www.jb51.cc/angularjs/140513.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐