所以我有这个长期存在的APIService工厂,它创建了将swagger函数传递给UI的函数。这是工厂的片段:
'use strict';
angular.module('myApp').factory('APIService', function ($http, $window, $q, swaggerClient, $mdToast) {
var ApiDoc = {};
ApiDoc.getAllBookmarks = function () {
return $q(function (resolve, reject) {
$http.get('client/components/api/Schema.json')
.success(function (data) {
var schema = data;
_.each(schema.apis, function (b) {
b.apiDeclaration.basePath = $window.location.origin;
})
var api = swaggerClient(schema);
api = api.apiBookmarks.getAll();
resolve(api);
});
});
}
return ApiDoc;
});
以下是控制器中用例的片段:
$scope.getAllDashboards = function () {
APIService.getAllBookmarks().then(function(data){
if (data.length > 0){
$scope.dashboardsList = data;
$scope.emptyDash = false;
} else {
$scope.emptyDash = true;
}
})
}
$scope.getAllDashboards();
这里固有的问题是,如果我在一个控制器中有30个API函数调用,那么对于schema.json有30个$ http请求,实际上是不需要的。问题是我无法弄清楚如何请求/存储json并使用swagger以与现在相同的方式调用函数(否则我必须在控制器中更改200多个方法,urgh)。我试过这个:
// var api = null;
// $http.get('client/components/api/Schema.json')
// .success(function (data) {
// var schema = data;
// _.each(schema.apis, function (b) {
// b.apiDeclaration.basePath = $window.location.origin;
// })
// api = swaggerClient(schema);
// });
但是之后无法获得一个函数来正确读取它,或者在控制器期望的承诺中返回函数调用的结果。
我这里没有其他JS开发人员,所以我需要大家的帮助!非常感谢!
答案 0 :(得分:0)
那很难看。如果你将swagger-client升级到更现代的东西,你可以选择一些。
首先,您可以将架构缓存为对象,并使用参数spec
在swaggerClient构造函数中提供它。在构造目标主机时,您仍需要将目标主机的URL传递给客户端。有了它,就不需要任何远程调用任何东西了。
接下来,您可以看到保持正确的swaggerClient实例,并在每次调用中使用它。