【问题标题】:Angularjs ng-model inside ng-repeat via (key,val) not updatingng-repeat中的Angularjs ng-model通过(key,val)不更新
【发布时间】:2014-07-16 15:59:06
【问题描述】:

这是我不工作的demo

<section ng-repeat="t in test">
  <div ng-repeat="(key,value) in t">
    <div>{{key}}</div>
   <input type="text" ng-model="value"/>
  </div>
</section>

模型保持不变。如何同步?请注意,数据结构很重要。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    ng-model 绑定将在当前范围内评估其表达式。由于ng-repeat 创建了一个子作用域,这意味着ng-model 将在子作用域上查找名为value 的属性。在您的示例中,我们希望它在 parent 范围内查找 val 属性,该范围的别名为 t

    这是设计使然,在您的情况下,可以通过在表达式中引用父范围 t 来规避。

    Working demo

    代码(注意输入元素上的绑定已经改变):

    <section ng-repeat="t in test">
      <div ng-repeat="(key,value) in t">
        <div>{{key}}</div>
       <input type="text" ng-model="t[key]"/>
      </div>
    </section>
    

    由于您使用的是 Angular 1.3 的测试版,这可能是一个错误。

    【讨论】:

    • 如果没有'.'在 ng-model 中,当模型在作用域上分配时(即在输入字段中输入文本),它将在子作用域中创建一个影子变量(ng-repeat 创建子作用域),它是变量的副本在父范围内 - 打破双向绑定。这是设计使然 - 但可能是很多混乱的根源。数组表示法 (item[]) 是个例外。
    • 那么如果 ng-model 不是值 t[key] 而是键本身呢?将键作为模型值引用的语法是什么?
    • @ahnbizcad 未经测试,但我假设ng-model="key"。如果这不起作用,您可能需要首先使用 Object.keys 之类的东西创建一个键数组
    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    相关资源
    最近更新 更多