我在各种服务中大量使用了 Angular 中的 $http 模块,但希望将它与 Mulesofts RAML 解析器集成。这将使我不必为了适应 RAML 规范而更新 angular 的某些部分。
有人做过吗?需要哪些步骤?
如果这是不可能的,我想只使用 $resource 模块来获取 RAML 中描述的 REST 资源并没有太多的工作。
将任何库集成到 AngularJS 中是完全可能的。
在你的情况下它更简单 - RAML 模块返回承诺,Angular 将使用它自己的承诺使用$q.when
它免费为你处理整个摘要周期集成问题。
RAML 解析器的用法如下:
//example from the documentation
RAML.Parser.loadFile('http://localhost:9001/myAPI.raml').then( function(data) {
console.log(data)
}, function(error) {
console.log('Error parsing: ' + error);
});
要让它与 Angular 很好地配合,你需要做的就是包装它,$q.when
它负责集成到摘要循环中:
$.when(RAML.Parser.loadFile('http://localhost:9001/myAPI.raml')).then( function(data) {
$scope.someProp = data;
}).catch(function(error) {
throw error; //Angular promises log when you use throw instead of $q.reject
});
当然,对于干净的 Angular 代码,您应该将其提取到服务中。
关键是 RAML 模块和 Angular 都使用 Promises/A+ 投诉的 Promise 实现,因此将两者集成起来非常简单。RAML 使用Q
和 Angular 使用它的一个着陆版本,称为 $q。