AngularJS - 使用 $http 时控制器无法从服务获取数据
AngularJS - controller doesn't get data from service when using $http
我有一个简单的网络应用程序,我喜欢从 json 加载一些数据。目前,数据已硬编码在我的服务中,一切正常。
当我更改我的服务以从外部 json 文件加载相同数据时,控制器在获取一些数据之前呈现视图。
现在是这个样子:
function() {
var tripsService = function() {
var trips = [{ .... SOME DATA }];
this.getTrips = function() {
return trips;
};
};
angular.module('customersApp').service('tripsService', tripsService);
}());
使用 $http.get :
function() {
var tripsService = function() {
var trips = [];
this.getTrips = function() {
$http.get('trips.json').success(function (data) {
var trips = data;
return trips;
});
};
};
angular.module('customersApp').service('tripsService', tripsService);
}());
这是我的 Plunker:
我能做些什么来改变这个?我已经阅读了一些有关将 resolve 属性 添加到我的 routeProvider 的内容,但我无法解决问题![=14=]
更新:也许我的描述不够准确,我必须学习更多关于处理数据的知识!来自 json 的数据应该只加载一次,这样任何视图更改都不会重新加载原始 json 文件。
谢谢
如果您想在检索内容时加载视图,您确实需要路由解析。
你可以做到这一点。
$routeProvider
.when("/someRoute", {
templateUrl: "sometemplat.html",
controller: "someController",
resolve: {
trips: function(tripsService){
return tripsService.getTrips();
}
}
})
这会将名为 trips 的变量解析到控制器中。
您需要将行程添加到您的控制器依赖项中。
如果一切正常,行程中应填充来自 api 的数据。
你必须了解承诺:
http://chariotsolutions.com/blog/post/angularjs-corner-using-promises-q-handle-asynchronous-calls/
在服务中你应该return直接调用$http
-服务的承诺:
this.getTrips = function() {
return $http.get('trips.json').then(function (response) {
trips = response.data;
return trips;
});
};
然后您必须在控制器中调用 then
方法来访问来自服务的数据:
function init() {
tripsService.getTrips().then(function(trips) {
$scope.trips = trips;
})
}
这是一个更新的 Plunker,其中包含一个工作示例:
http://plnkr.co/edit/QEvKMtKvhf49uIpNu5h8?p=preview
我有一个简单的网络应用程序,我喜欢从 json 加载一些数据。目前,数据已硬编码在我的服务中,一切正常。
当我更改我的服务以从外部 json 文件加载相同数据时,控制器在获取一些数据之前呈现视图。
现在是这个样子:
function() {
var tripsService = function() {
var trips = [{ .... SOME DATA }];
this.getTrips = function() {
return trips;
};
};
angular.module('customersApp').service('tripsService', tripsService);
}());
使用 $http.get :
function() {
var tripsService = function() {
var trips = [];
this.getTrips = function() {
$http.get('trips.json').success(function (data) {
var trips = data;
return trips;
});
};
};
angular.module('customersApp').service('tripsService', tripsService);
}());
这是我的 Plunker:
我能做些什么来改变这个?我已经阅读了一些有关将 resolve 属性 添加到我的 routeProvider 的内容,但我无法解决问题![=14=]
更新:也许我的描述不够准确,我必须学习更多关于处理数据的知识!来自 json 的数据应该只加载一次,这样任何视图更改都不会重新加载原始 json 文件。
谢谢
如果您想在检索内容时加载视图,您确实需要路由解析。
你可以做到这一点。
$routeProvider
.when("/someRoute", {
templateUrl: "sometemplat.html",
controller: "someController",
resolve: {
trips: function(tripsService){
return tripsService.getTrips();
}
}
})
这会将名为 trips 的变量解析到控制器中。
您需要将行程添加到您的控制器依赖项中。
如果一切正常,行程中应填充来自 api 的数据。
你必须了解承诺: http://chariotsolutions.com/blog/post/angularjs-corner-using-promises-q-handle-asynchronous-calls/
在服务中你应该return直接调用$http
-服务的承诺:
this.getTrips = function() {
return $http.get('trips.json').then(function (response) {
trips = response.data;
return trips;
});
};
然后您必须在控制器中调用 then
方法来访问来自服务的数据:
function init() {
tripsService.getTrips().then(function(trips) {
$scope.trips = trips;
})
}
这是一个更新的 Plunker,其中包含一个工作示例: http://plnkr.co/edit/QEvKMtKvhf49uIpNu5h8?p=preview