Javascript AngularJS select似乎需要在同一对象上匹配以设置所选选项
最近我问了一个问题,为什么我的angular select没有使用保存的答案设置我的select 这是我的选择:Javascript AngularJS select似乎需要在同一对象上匹配以设置所选选项,javascript,angularjs,Javascript,Angularjs,最近我问了一个问题,为什么我的angular select没有使用保存的答案设置我的select 这是我的选择: <select ng-model="question.answer" ng-options="opt as opt.Value for opt in question.options" /> 单击“setToThirdAnswer”按钮后,输出记录到控制台: 它是相同的结构,但不是相同的对象。因此,我想知道模型中的对象是否必须与其中一个选项完全
<select ng-model="question.answer" ng-options="opt as opt.Value for opt in question.options" />
单击“setToThirdAnswer”按钮后,输出记录到控制台:
它是相同的结构,但不是相同的对象。因此,我想知道模型中的对象是否必须与其中一个选项完全相同
。该按钮将答案设置为对选项对象之一的引用
因此,我很高兴我发现了为什么我的选择在页面刷新后没有设置所选值,但现在我真的很想知道(这一定是一个非常常见的用例):
如果我的选项是对象,并且我将整个对象设置为ng model
,那么我如何使用保存的json重新呈现表单,而无需首先在客户端进行一些处理
var json = question = {
options: [
{
id: 1,
Value: "One"
},
{
id: 2,
Value: "Two"
},
{
id: 3,
Value: "Three"
}
],
answer: {
id: 3,
Value: "Three"
}
};
因为answer对象和options数组的第三个值不是同一个对象,但是您不能用json表示引用(可以吗?)。是的,您需要具有相同的引用。您可以这样做:
question.answer = question.options[2]
直接在您创建它之后。ng options属性有一个
track by
表达式,用于执行您所说的操作:
ng-options="opt as opt.Value for opt in question.options track by opt.id"
查看更新的fiddle:这通常是完全错误的,如果项目顺序发生变化,硬编码索引是个坏主意!!
question.answer = question.options[2]
ng-options="opt as opt.Value for opt in question.options track by opt.id"