我正在建立一个时间轴系统,该系统基本上是由许多不同的指令构成的。
抽象而言,每个项目如下所示:
<project id='id'>
<h3 ng-bind='project.name'></h3>
<timeline items='project.timelines[0]'>
<timeline-item item='item' ng-repeat='item in timeline'>
<comments items='item.comments'>
<comment item='comment' ng-repeat='comment in comments'>
<user id='comment.user'></user>
<p ng-bind='comment.body'></p>
</comment>
</comments>
</timeline-item>
</timeline>
</project>
在顶层,我通过获取对项目的原始Firebase引用来创建该项目的对象,然后将其包装在
$firebase
包装器中。最后,我使用$asObject()
抓取了一个准备好用于模型的副本。这种技术对
<project>
指令来说很合适,因为我可以访问所有顶级属性以及.$save()
方法。但是,当我将此对象的子级传递给子级指令时,我无法调用
.$save()
。这意味着模型可以在视图中完美更新,但不能在Firebase中保存。一般而言,如何从现有的
$FirebaseObject
中提取$FirebaseArray
或$FirebaseObject
传递给指令?我知道我可以掌握原始参考资料来实现此目的,但实际上这看起来像:
...
// timeline-item.js
scope: {
item: '='
},
link: function(scope) {
scope.item; // is a $FirebaseObject
scope.comments scope.item.$ref().child('comments');
},
template:
"<comments items='comments'></comments>"
// comments.js
scope: {
items: '='
},
link: function(scope) {
scope.items; // is a Firebase reference
scope.items = $firebase(scope.items).$asArray();
}
也许可以使用
$bindTo
解决此问题?但是我也无法弄清楚跨多个指令如何工作。 最佳答案
$asArray
有一个称为$getRecord
的函数,我认为它将为您解决此问题。
var list = $firebase(ref).$asArray();
var rec = list.$getRecord("foo");
rec.update(data);
https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-firebasearray-getrecordkey
关于javascript - Angularfire:从$ FirebaseObject的子对象创建$ FirebaseObject,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28500344/