我一直在用Neo4j学习Angular,我在处理JSON时遇到了问题,我将其作为对查询的响应。
现在,我想捕获数据,并能够在不同的应用程序视图之间使用它(即点击选择的汽车,去查看那辆车),所以为了做到这一点,我想我需要建立一个处理所有数据的工厂。所以现在,我有这个。
我打电话给Neo,我猜也应该是在Factory而不是控制器。
function restcall($scope, $http) {
var call = '{ "statements" : [ { "statement" : "MATCH (n:Cars) RETURN n ORDER BY n.initRank DESC LIMIT 10" } ] }';
$http({
method: 'POST',
url: 'http://myserver:7474/db/data/transaction/commit',
data: call,
headers: { 'Content-Type': 'application/json',
'Authorization': 'Basic mybasekey' }
})
.success(function (data, status) {
$scope.status = status;
$scope.response = data.results;
})
})
};
这适用于个别情况,但更重要的是我收到的JSON作为对我的电话的回应。看起来像这样
{
"results":[{
"columns":[
"n"
],
"data":[
{"row":[{"name":"Car1","initRank":"..."}]},
{"row":[{"name":"Car2","initRank":"..."}]},
{"row":[{"name":"Car3","initRank":"..."}]},
{"row":[{"name":"Car4","initRank":"..."}]},
{"row":[{"name":"Car5","initRank":"..."}]},
{"row":[{"name":"Car6","initRank":"..."}]}]
}],
"errors":[]
}
现在,因为我只使用来自这个json的行,我想设置一个变量,比如汽车,它将具有这种形状
var Cars = [{
id: 0,
name: 'Car1',
initRank: '...'
}, {
id: 1,
name: 'Car2',
initRank: '...'
}, {
id: 2,
name: 'Car3',
initRank: '...'
}, {
// And so on until end of the result in rows
}];
现在,为此,我尝试使用FOR循环并将结果添加到单个数组成员,如
car[i].name = response.data[i].row[0].name
但它不起作用。
所以最终我的问题是。
1。我的工厂应该如何看待?
这可以吗?
.factory('Cars', function($scope, $http){
//rest of my rest call from function
} )
我已经看过使用$ http.get()的例子,但我不知道如何将我现在拥有的所有内容传递给我的http(方法需要为了db而发帖,我的密码调用,授权层..),使用http.get()。
2。如何格式化我的回复以获得不错的var Cars
?
还有一件事让我烦恼......
如果不是,就像我假设的那样,如果我用response.data[2].row[0].name
读取Car3如何将其传递给新视图?
答案 0 :(得分:1)
- 我的工厂应该怎么样?
醇>
请勿将$ scope传递给服务。 $ scope是视图和控制器之间的粘合剂。
.factory('Cars', function($http){
// return an object.
return {
getCars: getCars
}
function getCars(){
return $http.get('http://myserver:7474/db/data/transaction/commit', {params:{"param1": val1, "param2": val2}}).then(function(response){
return response.data.results.data.map(function(d){
return d.row[0];
});
})
}
})
- 如何格式化我的回复以获得一个不错的var汽车?
醇>
你可以使用,承诺链接,在数据格式化(制作合适的汽车)后,当第一个(服务器响应)得到解决时,返回第二个承诺。
如何?
已在getCars定义中包含此内容。
是否可以在不经过的情况下从工厂传递特定行 NG-重复?如果我想只为一个案例访问Car3。
是。只需将服务器返回的汽车存储在工厂的本地变量中。并且,定义一个getCar(carId)
方法,它将首先查看此变量,如果发现它将解析一个promise(使用$ q),否则,它将调用getCars()来获取数据从服务器。然后,通过获取汽车局部变量来解决承诺。