2014-10-10 46 views
4

我有以下HTML:NG选项设置为NG-模型对象

<div class="row" ng-repeat="question in currentTemplate.questions"> 
    <div class="col-xs-4" ng-show="editingQuestion[$index]"> 
     <select style="width:100%;" ng-model="editingCurrentlySelectedAnswerOption[$index]" 
     ng-options="answerOption as answerOption.back for answerOption in answerOptions"> 
     </select> 
    </div> 
</div> 

我想知道我是怎么设置的什么在SELECT语句显示的值。当页面加载时,它应该已经被设置,因为我通过一个for循环来设置editingCurrentlySelectedAnswerOption的值,以便每一个都被预先选择([$ index]指的是一个ng-repeat的索引,它在里面由于在ng-repeat中有多个选择,我需要在数组中每个ng-repeat需要一个点来跟踪每个单独的选择),但是首先它会作为空白点出现。我已经使用了ng-init,这是一个当按下按钮来取消隐藏上面的div时调用的函数,以及在页面加载时的函数。我使用DOM和console.logs中的绑定来检查值。他们似乎都是对的。在NG-选项answerOptions是:

var answerOptions = [ 
    { front: "RadioButton", back: "Multi-Choice" } 
    { front: "CheckBox", back: "Multi-Answer" } 
    { front: "TextBox", back: "Free Text" } 
]; 

当我打印的内容editingCurrentlySelectedAnswerOption [$指数]是它永远是正确显示就像上述目的的一个对象,但由于某些原因,它始终是一个空白加载时选择语句。有什么我不知道ng-options如何处理对象?还是我在做其他事情?

UPDATE:

我设置editingCurrentlySelectedAnswerOption的值是这样的:

this.scope.editingCurrentlySelectedAnswerOption = []; 

for (var i in this.scope.currentTemplate.questions) { 
if (this.scope.currentTemplate.questions.hasOwnProperty(i)) { 
     this.scope.editingCurrentlySelectedAnswerOption.push(this.scope.currentTemplate.questions[i].answerType); 
    } 
} 

的原因,我递增的倍量有在this.scope.currentTemplate问题,是因为在ng-repeat的html也重复了大量的问题。他们应该匹配。

,这是this.scope.currentTemplate.questions [0]如何定义:

new Utilities.Question(
    "Question1", 
    { front: "TextBox", back: "Free Text" }, 
    ["Yes", "Maybe", "No", "I don't know"], 
    [50.0, 25.0, 0.0, -25.0] 
) 

,这里是一个Utilities.Question的定义:

export class Question { 
    question: string; 
    answerType: any; 
    answerOptions: string[]; 
    answerWeights: number[]; 

    constructor(question?: string, answerType?: any, answerOptions?: string[], answerWeights?: number[]) { 

     this.question = question; 
     this.answerType = answerType; 
     this.answerOptions = answerOptions; 
     this.answerWeights = answerWeights; 

    } 

} 
+1

你能告诉你如何设置'editingCurrentlySelectedAnswerOption'的值吗?仅仅因为对象具有相同的属性并不意味着它们是平等的[(请参阅示例)](http://jsfiddle.net/qb6rsm1m/)。 – Stryner 2014-10-10 20:54:16

+0

我更新了它,使其更加具有描述性,代价很大。 – 2014-10-10 21:05:03

+0

你可以在'Question'中使用string而不是'answerType'对象吗?然后,将选项绑定到'answerOption.front作为answerOptionsback for answerOption in answerOptions'。在我看来,@尼斯有这个观点。 – nrodic 2014-10-10 21:09:19

回答

1

每个人都正确的, ng-model/ng-options引用对象的引用而不是值,所以即使两个对象的值是正确的,引用也不相同,因此,select没有看到ng-model变量为等于给出的选项。为了解决这个问题,我只是在我的ng选项的末尾添加了一条曲目,现在它可以工作。不知道这是否是最好的方法,但它的工作原理!感谢大家的帮助!