Angular调用自定义服务 - 找不到调用源

时间:2014-12-09 12:48:29

标签: javascript angularjs angularjs-service

我有一个模块app.posts。此模块中的几个路由工作正常,但在此我尝试显示create post表单:

.state('app.posts', {
    abstract: true,
    url: '/news',
    template: '<div ui-view class="fade-in-right-big smooth"></div>'
})
.state('app.posts.show', {
    url: '/{id}',
    templateUrl: 'app/posts/show.html',
    resolve: {
            deps: ['uiLoad',
                function( uiLoad ){
                    return uiLoad.load( [
                        'app/posts/show.controller.js'
                        ]);
            }]
    }
})
.state('app.posts.create', {
    url: '/create',
    templateUrl: 'app/posts/create.html',
    resolve: {
            deps: ['uiLoad',
                function( uiLoad ){
                    return uiLoad.load( [
                        'app/posts/create.controller.js'
                        ]);
            }]
    }
})

问题在于,当我访问此页面时,它会从自定义服务进行api调用:

GET /api/v1/node/create

如果我删除create.controller.jsapp/posts/create.html,我仍然会遇到相同的行为。它导航到正确的页面/news/create,并以某种方式进行此api调用。

对服务进行一些调试,很明显被调用的方法是getPost()。该服务定义为:

angular
    .module('app.posts')
    .service('Posts', Posts);

    Posts.$inject = ['$http'];

    function Posts($http) {

        var service = {
                getPosts:           getPosts,
                getPost:                getPost,
                addPost:            addPost,
                createPost:         createPost,
                deletePost:         deletePost
        };

        return service;

        /* ********************************
        *  Method: getPost
        ******************************** */
        function getPost(id) {
            var request = {
                method: 'GET',
                url: '../api/v1/node/' + id,
                headers: {
                    'Content-Type':     'application/json',
                    'Accept':               'application/json'
                }
            };

            return $http(request)
                .success(function(success){
                    return success;
                    console.log(success);
                })
                .error(function(error){

                    return error;
                });

        }
    }

我无法弄清楚如何调用此服务。

2 个答案:

答案 0 :(得分:0)

现在已经解决了。这与状态配置中的顺序有关。

/create被解释为/{id}并且正在调用show路线。为了解决这个问题,我已经重新命令app.post.create秒(app.post以下)。

答案 1 :(得分:0)

您无需更改订单,可以添加正则表达式

url: "/{id:[0-9]{1,8}}

有关详细信息:URL Parameters - Regex Parameters