【问题标题】:Angularjs binding to JSON sets value to undefinedAngularjs 绑定到 JSON 将值设置为未定义
【发布时间】: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 传递回来
  • 您仍然可以通过双向绑定将其传递回去。我不确定这是否是您的问题,但就像良好的编程习惯一样,我非常倾向于将值显式传递为&lt;question-form question="question"&gt;,而不是依赖隐式存在的范围值。
  • 是的,我只是认为我可以依赖从 rg-repeat 循环继承的范围。我会试试这个。奇怪的是,在一个单独的问题/答案中,我得到了一些绑定良好的字段。我将尝试在 jsfiddle 中重新创建问题

标签: javascript angularjs json


【解决方案1】:

可以像 question.text 而不是 question.title 一样简单吗?我在您的 JSON 中注意到它是文本。如果不是这样,您能否提供您的指令信息以获得答案,并可能设置一个 jsfiddle/plunkr 来显示它正在发生。

【讨论】:

  • 不,不是,是的,我会尝试让 jsfiddle 重新创建问题
猜你喜欢
  • 2010-10-25
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2013-10-01
  • 2014-01-25
相关资源
最近更新 更多