1

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


});
4

1 に答える 1

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);
        }
    }
});
于 2013-05-16T19:04:15.780 に答える