angular.js - Permintaan $http dalam perkhidmatan adalah normal, tetapi data tidak boleh diperolehi dalam pengawal
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-15 16:57:48
0
2
618

Gunakan $http dalam perkhidmatan tersuai untuk mendapatkan data fail json tempatan. Permintaan boleh berjaya, tetapi data tidak boleh diperolehi dalam pengawal.
Apabila anda memecahkan perkara itu, anda melihat bahawa data itu kosong. Halaman dimuat semula tetapi terdapat data. Apakah sebabnya?

Kod perkhidmatan tersuai:

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;
    }
]);

Kod dalam pengawal:

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);
    }
]);

Data JSON diperlukan:

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

Titik putus ialah console.log

Selepas halaman dimuat semula, ia adalah

Mengapa saya tidak boleh mendapatkan data daripada pengawal? Adakah kerana tak segerak?

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

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