angular.js - service中的$http请求正常,但controller里面不能拿到数据
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-15 16:57:48
0
2
594

在自定义的service里面用$http获取本地的json文件的数据。请求能成功,但在controller里面拿不到数据。
打断点的时候,看到数据是空的。页面刷新完却有数据。是什么原因?

自定义service的代码:

blogModule.service('blogData', ['$http', '$q',
    function ($http, $q) {
        var service = {
            returnedData: {},
            dataLoaded: {},
            getData: function (forceRefresh) {
                var dfd = $q.defer();
                if (!service.dataLoaded.genericData || forceRefresh) {
                    $http.get('../app/db.json')
                    .then(function success(data) {
                        angular.copy(data.data, service.returnedData);
                        service.dataLoaded.genericData = true;
                        dfd.resolve(service.returnedData);
                    })
                } else {
                    dfd.resolve(service.returnedData);
                }
                return dfd.promise();
            },
            addSomeData: function (someDataToAdd) {
                $http.post('../app/db.json', someDataToAdd)
                .then(function success(data) {
                    service.getData(true);
                })
            }
        };
        service.getData();
        return service;
    }
]);

controller里面的代码:

blogModule.controller('blogController', ['$scope', '$routeParams', '$location', 'blogData',
    function ($scope, $routeParams, $location, blogData) {
        var getBlogData = blogData.returnedData;
        var titles = $scope.titles = getBlogData.titles;

        console.log(blogData);
        console.log(titles);
    }
]);

需要请求的json数据:

{
    "titles": [
        {
            "title": "入门笔记",
            "source": "_post/入门笔记.html",
            "date": "201512",
            "categories": [
                "笔记",
                "小事记"
            ],
            "tags": [
                "笔记",
                "小事记"
            ]
        },
        {
            "title": "入门笔记2",
            "source": "_post/入门笔记2.html",
            "date": "201512",
            "categories": [
                "基础",
                "日常"
            ],
            "tags": [
                "基础",
                "日常"
            ]
        }
    ]
}

打断点是的console.log

页面重刷完之后是

为什么controller里面拿不到数据?是不是因为异步的原因?

曾经蜡笔没有小新
曾经蜡笔没有小新

全部回复(2)
给我你的怀抱

异步调用的问题
你执行service.getData()后
service.returnedData值还是空的~~~

还有service.getData()为什么要在service调用呢,
services应该是由其他模块调用的,在其它模块不需要数据的时候你去加载数据有什么意义
是要预加载么?

曾经蜡笔没有小新

1.你在service代码中写的service名是requestData,controller中写的却是blogData。不知道是不是这个原因。
2.如果是在自定义Service中使用$http的话,需要把$http和then部分拆开,在控制器代码先后调用。

也就是说,controller里面至少要写成这样:
requestData.getData().then(回调函数)

建议把回调函数的部分也封装到你的自定义service中

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板