【问题标题】:AngularJS select seems to need to match on the same object to set the selected optionAngularJS select 似乎需要在同一个对象上匹配才能设置选定的选项
【发布时间】:2014-07-01 06:41:36
【问题描述】:

我最近问了一个问题in this post,关于为什么我的角度选择没有使用保存的答案设置我的选择。

这是我的选择:

        <select ng-model="question.answer" ng-options="opt as opt.Value for opt in question.options" />     

pkozlowski.opensource 对this stackoverflow post 的回答让我想到我选择的ng-model 中设置的值与@987654327 中作为选项传递的任何值都不匹配@ 我的选择。

我创建了this jsfiddle that should highlight the issue。每当更改答案时,答案对象都会记录到控制台。 (请注意,由于某种原因,它在 jsfiddle 中被记录了两次,但当我在我的机器上本地运行相同的代码时,它只被记录一次

可以看到,当按钮被按下时,退出的答案是和第三个选项一样的对象结构,但是选择列表设置为空白选项。

将选择列表设置为第三个选项后记录到控制台的输出:

answer is: picklistTest.js:25
Object {id: 3, Value: "Three"} 

点击“setToThirdAnswer”按钮后输出记录到控制台:

answer is: picklistTest.js:25
Object {id: 3, Value: "Three"}

它是相同的结构,但不是相同的对象。所以我想知道模型中的对象是否必须与选项之一完全是同一个对象。

This second jsfiddle shows that that is the case。该按钮将答案设置为对选项对象之一的引用。

所以,我很高兴我发现了为什么我的选择在页面刷新后没有设置选定的值,但现在我真的很想知道(而且这必须是非常常见的用例):

如果我的选项是对象并且我将整个对象设置为ng-model,我如何在不先在客户端进行一些处理的情况下使用保存的 json 重新呈现表单?

var json = question = {
    options: [
       {
           id: 1,
           Value: "One"
       },
       {
           id: 2,
           Value: "Two"
       },
       {
           id: 3,
           Value: "Three"
       }
   ],
   answer: {
               id: 3,
               Value: "Three"
           }
};

因为答案对象和选项数组的第三个值不是同一个对象,但是不能用json表示引用(可以吗? )。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    ng-options 属性有一个 track by 表达式来执行您所说的操作:

    ng-options="opt as opt.Value for opt in question.options track by opt.id"
    

    查看更新的小提琴:http://jsfiddle.net/CkLEu/6/

    【讨论】:

      【解决方案2】:

      是的,您需要有相同的参考。你可以这样做:

      question.answer = question.options[2]
      

      在你创建之后直接。

      【讨论】:

      • 这通常是完全错误的,如果项目的顺序改变了,硬编码索引是个坏主意!
      猜你喜欢
      • 2017-03-31
      • 2021-03-22
      • 1970-01-01
      • 2017-02-06
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多