- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 AngularJS 申请 ui路由器消耗 REST API 与 超媒体 .总体思路是让 API 为其各种调用生成 url,并阻止客户端自己构建 url。
例如,在获取产品列表时,API 返回的内容如下:
[
{
"id": 1,
"name": "Product A",
"_links": {
"self": {
"href": "http://localhost:4444/api/products/1",
"name": null,
"templated": false
},
"actions": []
}
},
{
"id": 2,
"name": "Product B",
"_links": {
"self": {
"href": "http://localhost:4444/api/products/2",
"name": null,
"templated": false
},
"actions": []
}
}
]
ui router
传递 url的
data
属性(property)。但是,该页面不能添加书签。另一种方法是在 UI url 中传递 API url,这将使页面保持可收藏(只要 API url 不变),但 UI url 会非常难看。
最佳答案
我以前遇到过几次这个问题。我在下面逐步详细说明了我的首选解决方案。最后两个步骤专门针对您在帖子中概述的问题,但可以在整个应用程序中应用相同的原则。
1. 根端点
首先在 API 级别定义一个根端点。相应的根实体是顶级链接的集合,换句话说,客户端需要直接访问的链接。
这个想法是 客户端只需要知道一个端点 ,即根端点。这样做的好处是您无需将路由逻辑复制到客户端,并且 API 的版本控制变得更加容易。
根据您的示例,此根端点可能如下所示:
{
"_links": {
"products": {
"href": "http://localhost:4444/api/products",
}
}
}
$stateProvider.state('main', {
resolve: {
root: function($http) {
return $http.get("http://localhost:4444/api/").then(function(resp){
return resp.data;
});
}
}
});
$stateProvider.state('products', {
parent: 'main',
url: "/products",
resolve: {
products: function($http, root) {
return $http.get(root._links.products.href).then(function(resp){
return resp.data;
});
}
}
});
$stateParams
传入产品 ID (因此,它是客户端 URI 的一部分)并使用它从父级解析的产品数组中检索正确的产品:
$stateProvider.state('products.product', {
url: "/{productId}"
resolve: {
product: function($http, $timeout, $state, $stateParams, $q products) {
var productId = parseInt($stateParams.productId);
var product;
for (var i = 0; i < products.length; i++) {
product = products[i];
if (product.id === productId) {
return $http.get(product._links.self.href).then(function(response){
return response.data;
});
}
}
// go back to parent state if no child was found, do so in a $timeout to prevent infinite state reload
$timeout(function(){
$state.go('^', $stateParams);
});
// reject the resolve
return $q.reject('No product with id ' + productId);
}
});
关于AngularJS 与超媒体 (HATEOAS) : how to use hypermedia urls accross states,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38998858/
我想在另一个函数中使用登录 session ,但它不起作用。我使用 python 2.7 和请求模块。服务器是一个商业网络 API。 def add_device(s, argv): head
我已经定义了多个路由中间件,并希望在多个路由/ Controller 之间共享它们。 这是我的设置: app.js 需要 ./routes/index.js: // load fs module va
我有一个 AngularJS 申请 ui路由器消耗 REST API 与 超媒体 .总体思路是让 API 为其各种调用生成 url,并阻止客户端自己构建 url。 例如,在获取产品列表时,API 返回
这里有两篇文章基本上描述了与我相同的需求。不幸的是,这些都没有具体的解决方案。 http://forum.ionicframework.com/t/reuse-master-detail-page-t
为简单起见,假设我有两个 flex mxml 页面。 表单.mxml 按钮.mxml 如果 form.mxml 页面有以下代码,它应该可以正常工作: 但是如果代码是这样的: 表单.mxml
请原谅我对 Spring MVC 的了解有限,我仍在尝试了解它是如何工作的。 我的问题如下:我正在开发一个简单的猜测游戏,您可以从下拉选择选项中选择一个字母,然后使用有关您猜测了多少次的更新信息刷新相
我正在使用 Google Drive API v2 使用类似 Files: get 上显示的函数来获取文件内容(参见downloadFile函数)。 这适用于 Chrome、Firefox,没有任何问
我是一名优秀的程序员,十分优秀!