用来自Neo4j服务器的JSON数据在Angular中创建一个工厂
Creating a factory in Angular with JSON data from Neo4j server
我一直在用Neo4j学习Angular,我遇到了处理JSON的问题,我得到了对我的查询的响应。
现在,我想要捕获数据,并能够在不同的应用程序视图之间使用它(即点击选择的汽车,去查看那辆车),所以为了做到这一点,我想我需要设置一个工厂处理所有的数据。现在,我有这个。
我对Neo的调用,我猜它也应该在Factory而不是controller中。
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中的行,我想设置一个变量,比如cars,它的形状是
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
?
还有一件事困扰着我…
- 是否有可能在不经过ng-repeat的情况下从工厂传递特定行?如果我只想访问一个case的Car3。
如果不是,像我假设的那样,如何,如果我正在阅读Car3与response.data[2].row[0].name
如何将其传递给新视图?
- 我的工厂应该是什么样子?
- 你的工厂应该返回一个对象,它定义了你的getCars()方法。getCars()应该返回一个promise。
-
不要将$scope传递给services。$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 Cars ?
你可以使用承诺链接,当第一个承诺(来自服务器的响应)被解析后,在数据格式化(做出适当的cars)之后返回第二个承诺。
如何?
已经包含在getCars定义中。
是否有可能从工厂传递特定行而不经过ng-repeat吗?如果我想只访问一个case的Car3
是的。只需将从服务器返回的汽车存储在工厂的局部变量中。并且,定义一个getCar(carId)
方法,它将首先在这个变量中查找,如果发现它将解析一个承诺(使用$q),否则,它将调用getCars()从服务器获取数据。然后,通过获取car的局部变量来解析承诺。
- 对象属性不是在工厂成员函数内部创建的
- 使用AngularFire创建用户并调用工厂以显示通知
- 使用 SwaggerJS 创建 API 工厂
- 使用 jQuery widget 工厂,创建包含 ui.sortable 的树视图
- 如何使用getter和setter方法创建一个Angular工厂而不遇到竞争条件
- 我们如何使用新的运算符和工厂模式在JavaScript中创建类的实例
- 无法使用工厂创建对象
- 在创建工厂服务时,return$http.post在angular中到底意味着什么
- AngularJS设计模式:我应该使用工厂来创建构造函数吗
- AngularJS在工厂中创建元素
- 在angular js中创建服务或工厂(或其他东西)的建议
- 如何创建一个使用http的工厂.Get并把它传递给angular中的多个控制器
- Javascript:需要帮助创建一个类似工厂的函数
- 用来自Neo4j服务器的JSON数据在Angular中创建一个工厂
- 你能在Angular中从一个工厂中创建多个服务吗?
- Angular工厂服务变量创建机制
- 在事件上创建对象的工厂与多用途构造函数
- 创建工厂后看不到任何数据
- 如何从现有服务的角度创建工厂
- 为require节点模块创建工厂