新手问题:angularjs controller调用factory resource返回Undefined

大神帮忙看看,小弟跪谢。
factory:

angular.module('starter.service',[])

.factory('ArticleFactory',function($rootScope,$resource,ENV){

    var apiUrl=ENV.api;//请求url
    var topics={};//存储得到的数据

    var resource=$resource(apiUrl, {},{query:{isArray:false}});

    return{
        getTopTopics:function(){

            resource.query(
                {
                    a: "getPortalList",
                    catid: 20,
                    page: 1
                },
                function(r){
                    return r.result;
                }
            );
        }
    }

});

controller:

.controller('articleCtrl',function($scope,ENV,ArticleFactory){

    console.log(ENV.api);
    console.log(ArticleFactory.getTopTopics());
})

调用返回:
图片描述

阅读 4.3k
3 个回答

为什么不讲$resource直接返回呢?

方法ArticleFactory.getTopTopics()是异步的

1.因为你的方法没有return任何东西。

2.如果你非要在getTopTopics里面进行异步,那么需要使用promise去进行return,不然还是undefined
建议使用下面的方法,return之前先进行查询。

.factory('ArticleFactory',function($rootScope,$resource,ENV){

    var apiUrl=ENV.api;//请求url
    var topics={};//存储得到的数据
    var data = null;//定义一个变量接受返回的结果

    var resource=$resource(apiUrl, {},{query:{isArray:false}});
    resource.query(
                {
                    a: "getPortalList",
                    catid: 20,
                    page: 1
                },
                function(r){
                    data = r.result;
                }
            );
    return{
        getTopTopics:function(){
            return data;
        }
    }

});

这样就能获取到你想要的值了:console.log(ArticleFactory.getTopTopics());

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题