数据没有从angularjs工厂传回来

时间:2013-05-16 18:58:19

标签: angularjs

我创建了一个工厂来检索json文件。我确实看到该对象在调用后在我的控制台中输出,但数据未显示在我的视图中。我没有在我的控制器中正确调用工厂吗?

这是我的应用:

var tools = angular.module("tools", [])

tools.config(function ($routeProvider) {

    $routeProvider.when('/home', {
        templateUrl: 'home.html',
        controller: 'HomeController'
    });
    $routeProvider.when('/about', {
        templateUrl: 'about.html',
        controller: 'AboutController'
    });




    $routeProvider.otherwise({
        redirectTo: '/home'
    })

});

tools.controller("HomeController", function ($scope, fetchData) {

    $scope.record = fetchData.getData();
    $scope.clearSearch = function () {
        $scope.search = "";
        $scope.name2 = "";
    }
    $scope.name2 = "";
    $scope.search = "";



});


tools.controller("AboutController", function ($scope) {
    //nothing yet
});



tools.factory('fetchData', function ($http) {
    return {
        getData: function () {
            $http({
                method: 'GET',
                url: 'list.json'
            }).
            success(function (data, status, headers, config) {
                console.log(data);
                return data;
            });
        }
    }


});

1 个答案:

答案 0 :(得分:2)

$http调用是异步的(与所有AJAX请求一样),因此回调中的return语句实际上并没有将数据返回给控制器。您要么想要使用$resource,它几​​乎可以像您编写的那样工作,或者将回调传递给getData,如:

在您的控制器中:

fetchData.getData(function (data) {
    $scope.record = data;
});

在您的服务中:

tools.factory('fetchData', function($http) {
    return {
        getData: function(cb) {
            $http({method: 'GET', url: 'list.json'}).success(cb);
        }
    }
});