搜索
javascript - 新手问题:angularjs controller调用factory resource返回Undefined
伊谢尔伦
伊谢尔伦 2017-04-10 16:33:31
[JavaScript讨论组]

大神帮忙看看,小弟跪谢。
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());
})

调用返回:

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(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());

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号