【发布时间】:2015-05-31 09:50:58
【问题描述】:
我有一个名为 ctrl.data 的 AngularFire 对象 ($firebaseObject()),ng-repeat 会显示该对象。在 ng-repeat 生成的标记中,我有一个按钮,单击该按钮会运行一个功能。我想将 ng-repeat 用于填写标记的项目中的信息传递给函数。
我在 Firebase 上的数据结构如下*:
*所有空格都已从对象名称中删除
标记
<div ng-repeat="data in ctrl.data track by $index">
{{data.name}}, {{data.lvl}} ...
<input type="button" ng-click="ctrl.addToBook(data.classes, data.comp, data.csttime, ...)" value="Add!">
</div>
功能
ctrl.addToBook = function (classes, comp, csttime, ...) {
ctrl.book.push({
classes: classes, comp: comp, csttime: csttime ...
});
当函数运行时,它正在推送:
{classes: undefined, comp: undefined, csttime: undefined...}
我也试过
- 替换传递参数
data并推送整个对象 但我被告知我正在推动的是未定义的。例子:ng-click="addToBook(data)"和function(toBePassed) {data.book.push(toBePassed);} - 在每个参数周围加上 {{ }},
Angular 不想渲染。错误:[$parse:syntax]
http://errors.angularjs.org/1.3.15/$parse/syntax?... 稍后
对按钮的引用。按照链接给出:
Error: $parse:syntax / Syntax Error: Syntax Error: Token '' {1} at column {2} of the expression [{3}] starting at [{4}].我不知道 如何解释。
我需要做什么才能将信息传递给函数,或者让函数知道要推送什么?
被 ng-repeat 迭代的每个对象都有一个与对象名称匹配的 name 属性,因此可以删除对象的名称,我可以使用数组而不是对象。将数据重组为数组是否会使这更容易,因为我可以引用一个 Id?如果是这样,我相信我会遇到与this 类似的情况,但更愿意避免使用 ID。
另一种选择是为每个对象提供一个推送所需数据的方法。这会是更好的方法吗?我仍然对 angular 感觉很陌生,但我认为 angular.forEach 和 $firebaseObject.$extend 将是从哪里开始,对吗?
更多信息:
我已经仔细检查了 ctrl.data 的内容。每个条目都有 data.__.classes,所以我认为问题不在于缺少参数。这是 console.log(ctrl.data) 的输出。
$$conf: Object
$id: null
$priority: null
AnimalFriendship: Object
classes: "Bard, Cleric (Nature), Druid, Ranger"
comp: "V, S, M (a morsel of food)"
csttime: "1 action"
desc: "-Long description-"
duration: "24 hours"
lvl: 1
name: "Animal Friendship"
range: "30 feet"
ritual: false
school: "Enchantment"
__proto__: Object
-Many more objects which have the same properties as above-
__proto__: Object
$$error: ...
$$notify: ...
$bindTo: ...
$destroy: ...
$loaded: ...
$ref: ...
$remove: ...
$save: ...
$watch: ...
forEach: ...
__proto__: Object
但是 console.log(ctrl.data.AnimalFriendship) 输出未定义。
tldr; 我无法访问 ng-repeat 正在访问的对象,因此无法将每次迭代处理的信息传递给函数。从 AngularFire 对象更改为 AngularFire 数组可能需要作为答案,并仔细规划以避免possible $index problems。
【问题讨论】:
-
如果这仍然是一个问题,提出一个 plunkr 显示问题,我会看看它
标签: javascript angularjs firebase angularfire