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

在自定义的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()가 호출되는 이유는 무엇입니까?
서비스는 다른 모듈에서 호출되어야 합니다. 다른 모듈에 데이터가 필요하지 않은 경우 미리 로드해야 하는 이유는 무엇입니까?

曾经蜡笔没有小新

1. 서비스 코드에 작성한 서비스 이름은 requestData이지만 컨트롤러에 작성한 이름은 blogData입니다. 이것이 이유인지는 모르겠습니다.
2. 커스텀 서비스에서 $http를 사용하는 경우 $http 부분을 분리한 후 컨트롤러 코드에서 차례로 호출해야 합니다.

즉, 컨트롤러는 최소한 다음과 같이 작성되어야 합니다:
requestData.getData().then(콜백 함수)

콜백 함수 부분을 사용자 정의 서비스에 캡슐화하는 것이 좋습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿