URL更改时刷新AngularJS中的信息(不刷新)

时间:2013-11-30 14:26:15

标签: angularjs

在AngularJS中,我有一个服务,其中包含一个用于从API返回单个帖子的方法。它设置为......

.factory('Posts', ['$resource', '$routeParams',

    function($resource, $routeParams){

        return $resource('/api/posts/', {}, {
                single: {
                    url: '/api/posts/' + $routeParams.post_id,
                    method:'GET',
                }

    });

}])

我设置了一个路由提供商来查看网址上的单个帖子:/#/ p / 14

当我第一次登陆页面时,这是正常的,但如果我在最后更改数字,则在刷新之前没有任何反应。由于URL中有#,我理解为什么这不是如何解决问题。在Googles上我似乎找不到任何东西。希望有人可以帮忙!

1 个答案:

答案 0 :(得分:1)

感谢原帖子评论中的帮助。这使我走上正确的轨道来诊断问题。这是一个新手错误,我将在下面向任何可能找到相同内容的人解释。

问题出在我如何设置我的控制器和服务以从URL中绘制帖子的ID。根据原始帖子,您可以看到我使用$ routeParams.post_id在工厂中调用URL参数。像这样将变量添加到最后并不是正确的方法,实际上如下所示:

.factory('Posts', ['$resource', '$routeParams',
    function($resource){
        return $resource('/api/posts/', {}, {
                single: {
                    url: '/api/posts/:post_id',
                    method:'GET',
                }
    });
}])

我原本试过这个但是它似乎不起作用,重新审视问题并查看评论中提供的示例代码链接我意识到我错误地从控制器调用它的参数的目的

有问题的:

Posts.single({}, function(response){ 
   $scope.post = response ; 
});

工作:

Posts.single({ post_id: $routeParams.post_id }, function(response){ 
   $scope.post = response ; 
});

我没有意识到这些参数将用于绑定该信息,我认为它们纯粹用于工厂请求的GET信息。

一旦我把这些东西分类出去,它没有问题!

<强> TL; DR

在工厂中使用$ routeParams,从控制器传递它是一种非常糟糕的方法。

 url: '/api/posts/' + $routeParams.post_id,