javascript - Angularjs如何在工厂中获取api
问题描述
我一直在寻找几个小时,找不到我需要的东西。有哪位好心人可以帮帮我吗?我试图从我的控制器翻译这样的东西:
myApp.controller('displayCatController', ['$scope','$http','$q', 'displayAll', function($scope, $http, $q, displayAll){
var CombinedName = [];
//Display auditoriums information
var CategoryAudit = $http({
method: 'GET',
url:'https://developers.onemap.sg/publicapi/themeapi/retrieveTheme?queryName=auditoriums&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjMsInVzZXJfaWQiOjMsImVtYWlsIjoicHVibGljQXBpUm9sZUBzbGEuZ292LnNnIiwiZm9yZXZlciI6ZmFsc2UsImlzcyI6Imh0dHA6XC9cL29tMi5kZmUub25lbWFwLnNnXC9hcGlcL3YyXC91c2VyXC9zZXNzaW9uIiwiaWF0IjoxNTM4ODY2MTM3LCJleHAiOjE1MzkyOTgxMzcsIm5iZiI6MTUzODg2NjEzNywianRpIjoiOWZhMDVmZDUzNGRhNjU1ZDQ3YTgwODdmMGZkYjY1OGEifQ.2RbY7CGZY5hRfKZHVBels1XUDiAh9zU2lyUvePF8dXk'
}).then(function successCallback(response) {
$scope.auditoriums = response.data.SrchResults;
$scope.auditoriums.splice(0,1);
}, function errorCallback(response) {
console.log(response);
});
//Display exhibitions information
var CategoryExhibit = $http({
method: 'GET',
url: 'https://developers.onemap.sg/publicapi/themeapi/retrieveTheme?queryName=exhibitioncentres&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjMsInVzZXJfaWQiOjMsImVtYWlsIjoicHVibGljQXBpUm9sZUBzbGEuZ292LnNnIiwiZm9yZXZlciI6ZmFsc2UsImlzcyI6Imh0dHA6XC9cL29tMi5kZmUub25lbWFwLnNnXC9hcGlcL3YyXC91c2VyXC9zZXNzaW9uIiwiaWF0IjoxNTM4ODY2MTM3LCJleHAiOjE1MzkyOTgxMzcsIm5iZiI6MTUzODg2NjEzNywianRpIjoiOWZhMDVmZDUzNGRhNjU1ZDQ3YTgwODdmMGZkYjY1OGEifQ.2RbY7CGZY5hRfKZHVBels1XUDiAh9zU2lyUvePF8dXk'
}).then(function successCallback(response) {
$scope.exhibitions = response.data.SrchResults;
$scope.exhibitions.splice(0,1);
}, function errorCallback(response) {
console.log(response);
});
// To combine all the $http API into one
$q.all([CategoryAudit, CategoryExhibit, CategoryHotel]).then(function(){
$scope.combine = $scope.exhibitions.concat($scope.auditoriums, $scope.hotels);
// For loop to get only the names
for (var i = 0; i < $scope.combine.length; i++){
if (i >= 0){
CombinedName.push($scope.combine[i].NAME);
}
}
});
}]);
进入一个工厂,在那里我可以将我的 $http 调用放在那里以使其更清洁。我真的很感激任何帮助。
解决方案
有关工厂和控制器使用情况,请参阅下面的示例代码。
//Factory
angular.module('myApp')
.factory('dataFactory', ['$http', function($http) {
var urlBase = '/api/customers';
var dataFactory = {};
dataFactory.getCustomers = function() {
return $http.get(urlBase);
};
return dataFactory;
}]);
//Controller
angular.module('myApp')
.controller('myController', ['$scope', 'dataFactory',
function($scope, dataFactory) {
$scope.customers;
getCustomers();
function getCustomers() {
dataFactory.getCustomers()
.then(function(response) {
$scope.customers = response.data;
}, function(error) {
console.log(error.message;)
});
}
}
]);
推荐阅读
- python-3.x - cx_Oracle 返回零行
- laravel - 在 App Engine Standard 上使用 Laravel Queue 和 Google Tasks
- css - 括号 CSS 选择器
- amazon-web-services - AWS - adminGetUser 返回意外错误
- python-3.x - 在 python 中查找列表的最小值和最大值。得到我 TypeError: 'int' object is not callable
- apache-kafka-streams - 仅当在流上接收到新事件时才抑制触发事件
- android - 如何在 Firebase 中查询多个节点/引用
- python-3.x - kivy 的键盘事件
- reactjs - React - 重定向用户未经过身份验证
- javascript - 将 CKEditor 与 ExpressJS 一起使用时在浏览器中显示的 HTML 标记