我正在關注Pro AngularJS的教程,我正在從HTTP API檢索一些產品。而不是使用Deployd,我想用RavenDB代替。如何使用AngularJS和RavenDB檢索ID作爲索引的一部分?
繼this post的建議,我可以使用動態索引來獲取所有的產品是這樣的:
http://localhost:8080/databases/Catalogue/indexes/dynamic/Products
這導致了JSON這樣的:
{
Results: [
{
name: "Kayak",
description: "A boat for one person",
category: "Watersports",
price: 275,
@metadata: {
Raven-Entity-Name: "Products",
@id: "products/1",
Temp-Index-Score: 0.882217,
Last-Modified: "2014-10-07T20:26:31.4436923Z",
Raven-Last-Modified: "2014-10-07T20:26:31.4436923",
@etag: "01000000-0000-0001-0000-000000000001"
}
},
{ ... }
並且AngularJS的一個樣本會導致這樣的結果:
$http.get(dataUrl)
.success(function(result) {
$scope.products = result.Results;
});
使用此方法時,ID存儲爲product["@metadata"].["@id"]
,這在受影響的頁面上有點難以綁定,而不是product.id
。當試圖顯示的ID,從一籃子張貼ID後面進行刪除,你會做這樣的事情:
<table>
<tr ng-repeat="product in products">
<td>{{product["@metadata"]["@id"]}}</td>
<!-- other columns -->
</tr>
</table>
的另一種方法來解決這個問題是基本動態創建ID,像這樣:
$http.get(dataUrl)
.success(function (result) {
var localResults = [];
for (var i = 0; i < result.Results.length; i++) {
localResults.push(result.Results[i]);
localResults[i].id = result.Results[i]["@metadata"]["@id"];
};
$scope.data = {
products: localResults
};
});
我試圖創建一個顯式調用了ID指標,因此,例如:
// Index: Products/All
from product in docs.Products
select new {
id = product.Id,
name = product.Name,
category = product.Category,
description = product.Description,
price = product.Price
}
但是文檔格式與以前完全一樣。
我的問題是這樣的:
是否有可能爲RavenDB發射剛剛從文件中的字段,甚至通過一)忽略元數據或b)明確地將標識特定指數或變壓器作爲一個領域。
的'$ scope.getId()'聽起來像這裏的贏家。我可以把它放在一個服務,以減少重複? – 2014-10-10 09:36:21
當然。您可能想從服務中獲取數據,然後將該方法添加到所有返回的對象中。這樣你就可以直接調用{{product.getId()}}。 – 2014-10-10 12:37:40