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

在自定义的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里面拿不到数据?是不是因为异步的原因?

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

membalas semua(2)
给我你的怀抱

Masalah dengan panggilan tak segerak
Selepas anda melaksanakan service.getData()
nilai service.returnedData masih kosong~~~

Dan mengapa service.getData() dipanggil dalam perkhidmatan
Perkhidmatan harus dipanggil oleh modul lain. Apakah gunanya memuatkan data apabila modul lain tidak memerlukan data? dipasang.

曾经蜡笔没有小新

1. Nama perkhidmatan yang anda tulis dalam kod perkhidmatan ialah requestData, tetapi nama yang anda tulis dalam pengawal ialah blogData. Saya tidak tahu sama ada ini sebabnya.
2. Jika anda menggunakan $http dalam perkhidmatan tersuai, anda perlu memisahkan $http dan kemudian bahagian dan memanggilnya satu demi satu dalam kod pengawal.

Dalam erti kata lain, pengawal mesti ditulis sekurang-kurangnya seperti ini:
requestData.getData().then (fungsi panggil balik)

Adalah disyorkan untuk memasukkan bahagian fungsi panggil balik ke dalam perkhidmatan tersuai anda

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan