【发布时间】:2016-01-29 10:35:07
【问题描述】:
在一些自定义指令中,我遇到了一个非常棘手的嵌套绑定问题。我有一个看起来有点像这样的 JSON 结构;
{
survey:
questions:[
{
text:'Question 1',
answers:[
{
text:'Answer 1'
},
..
]
},
...
]
}
每个调查都有很多问题,每个问题都有很多答案。我已经为调查和问题的表格创建了指令。问题指令具有嵌套的答案指令。这些指令被循环出并绑定到 JSON。 HTML 如下所示:
页面;
<div>
<survey-form></survey-form>
<div ng-repeat="question in survey.questions">
<question-form></question-form>
</div>
</div>
问题形式指令;
<div>
<h1>{{question.title}}</h1>
<div ng-repeat="answer in question.answers">
<answer-form></answer-form>
</div>
</div>
这一切看起来都很好,我在控制台中没有收到任何错误。然而,一旦与表单输入的绑定完成,看似随机的文本属性就会在底层 JSON 中设置为未定义。如果我绑定到不可编辑的元素,一切都如预期的那样。此外,这不适用于嵌套 JSON 中的每个元素 - 我看到一些文本值设置为未定义,而其他文本值则保留在源 JSON 中。
谁能解释这个问题?它真的很烦人,我认为可能是 Angular 中的一个错误..
提前致谢
【问题讨论】:
-
指令是如何定义的?你只是隐含地依赖周围的范围来传递这些值,还是你实际上在指令中设置了一个本地范围?
-
感谢您的回复 - 是的,隐含的 - 例如通过重复问题我正在访问指令中的 $scope.question。我故意避免隔离指令范围,因为我希望将绑定到父 JSON 传递回来
-
您仍然可以通过双向绑定将其传递回去。我不确定这是否是您的问题,但就像良好的编程习惯一样,我非常倾向于将值显式传递为
<question-form question="question">,而不是依赖隐式存在的范围值。 -
是的,我只是认为我可以依赖从 rg-repeat 循环继承的范围。我会试试这个。奇怪的是,在一个单独的问题/答案中,我得到了一些绑定良好的字段。我将尝试在 jsfiddle 中重新创建问题
标签: javascript angularjs json