我无法从控制器呼叫服务

时间:2014-10-23 15:49:44

标签: angularjs

我正在尝试从我的控制器中调用服务

leadService.loadPage.query({pageNumber: pageNumber}, success, error);

服务定义

define([], function() {
    return ['$resource', function ($resource) {

        return {
            loadPage: loadPage
        };


        function loadPage() {
            return $resource('http://localhost/api/loadPage/:pageNumber', null, {
                query: {
                    method: 'GET',
                    params: {
                        pageNumber: '1'
                    },
                    isArray: true
                }
            });
        }
    }]
})

显示错误TypeError: undefined is not a function。它可能无法触发query语句。 我正在使用RequireJS和AngularJS。

1 个答案:

答案 0 :(得分:1)

这里有两个问题。第一个被@MannyD发现。您必须像这样修复函数定义(即在引用它的return语句之前声明函数):

define([], function() {
    return ['$resource', function ($resource) {
        function loadPage() {
            return $resource('http://localhost/api/loadPage/:pageNumber', null, {
                query: {
                    method: 'GET',
                    params: {
                        pageNumber: '1'
                    },
                    isArray: true
                }
            });
        }

        return {
            loadPage: loadPage
        };
    }]
})

第二个问题是我发现的问题:像leadService.loadPage.query({pageNumber: pageNumber}, success, error);这样的调用会触发错误,因为loadPage是一个函数,而不是$reource。您必须 添加定义中的parens 在呼叫中添加父级。这意味着:

define([], function() {
    return ['$resource', function ($resource) {
        function loadPage() {
            return $resource('http://localhost/api/loadPage/:pageNumber', null, {
                query: {
                    method: 'GET',
                    params: {
                        pageNumber: '1'
                    },
                    isArray: true
                }
            });
        }

        return {
            loadPage: loadPage()
        };
    }]
});

//...

leadService.loadPage.query({pageNumber: pageNumber}, success, error);

define([], function() {
    return ['$resource', function ($resource) {
        function loadPage() {
            return $resource('http://localhost/api/loadPage/:pageNumber', null, {
                query: {
                    method: 'GET',
                    params: {
                        pageNumber: '1'
                    },
                    isArray: true
                }
            });
        }

        return {
            loadPage: loadPage
        };
    }]
});

//...

leadService.loadPage().query({pageNumber: pageNumber}, success, error);