我创建了一个工厂来检索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;
});
}
}
});
答案 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);
}
}
});