Coffeescript 在子控制器中使用来自父控制器的多个HTTP请求结果
如何在子控制器中使用来自父控制器的多个异步HTTP请求的结果?结果将在视图中解析,但不会在另一个控制器中解析。下面的代码片段是为了简洁起见,我尝试使用literate生成一个最小的示例 我意识到要复制它有点困难,因为需要运行CouchDB并为它添加一个带有设计文档的数据库,但我希望您可以不这样做而遵循这个示例 我已经试着把所有相关的评论都包含在这个片段中,所以对于它的长度我深表歉意Coffeescript 在子控制器中使用来自父控制器的多个HTTP请求结果,coffeescript,angularjs,couchdb,Coffeescript,Angularjs,Couchdb,如何在子控制器中使用来自父控制器的多个异步HTTP请求的结果?结果将在视图中解析,但不会在另一个控制器中解析。下面的代码片段是为了简洁起见,我尝试使用literate生成一个最小的示例 我意识到要复制它有点困难,因为需要运行CouchDB并为它添加一个带有设计文档的数据库,但我希望您可以不这样做而遵循这个示例 我已经试着把所有相关的评论都包含在这个片段中,所以对于它的长度我深表歉意 {{db.name} {{foo.name} app=angular.module'test'
-
{{db.name}
-
{{foo.name}
app=angular.module'test',['ngResource','ngRoute']
CouchDB文档的ngResource定义;URL是相对的,因为
每个文档都是从主应用程序数据库设计内部提供的
文档作为附件。
app.factory“Doc”[“$resource”,($resource)->
$resource'/:db/:doc',{doc:'@_id',rev:'@_rev'},
将有许多CouchDB数据库,每个数据库包含具有
`键入值为“foo”的“foo”。然后要列出所有的“foo”,有一个名为“foos”的视图`
在定义为:`emit(doc.\u id,doc)if doc.type的每个数据库中
是'foo'`。以下附加方法用于使用该视图。
查询:
方法:“GET”,url:“/:db/\u design/ddoc/\u view/:view”,isArray:true,
回应:(回应)->
angular.fromJson(response).rows.map(row)->row.value
]
此父控制器数据需要可用于子控制器。
app.controller“parentCtrl”,($scope,Doc)->
$scope.dbs=[]
Doc.get db:'appdb',Doc:'u design/app\u ddoc',(app\u ddoc)->
主应用程序设计文档包含一个键'db_ids',其值为
数据库ID数组(例如,`['c-12345','c-54321',…]`)。实际姓名
这些数据库包含在它们的设计文档中,然后需要
分开取。
angular.forEach app_ddoc.db_id,(db_id)->
Doc.get db:db_id,Doc:“_design/ddoc”,(ddoc)->
Doc.query db:db_id,视图:'foos',(foos)->
$scope.dbs.push id:db_id,name:ddoc.name,foos:foos
app.controller'childCtrl',($scope,$routeParams,Doc)->
要显示当前所选“foo”的信息,不应存在任何
从服务器重新获取其数据的原因,因为这已经完成
在“parentCtrl”中。理想情况下,从“$scope.dbs”中过滤掉它。
$scope.foo=$scope.dbs.filter((db)->db.id是$routeParams.db).pop()
.foos.filter(foo)->foo.id是$routeParams.doc
唉,“$scope.dbs”可能还没有解决,正因为如此,一个
显示错误:`error:'undefined'不是对象(正在评估)
“$scope.dbs.filter”)`。
app.config['$routeProvider',($routeProvider)->
$routeProvider.when'/:db/foos/:doc',
模板URL:'foo'
控制器:childCtrl
]
angular.element(document.ready->angular.bootstrap文档,['test']