我有一个智能表,其中一列包含基于一个对象的选择选项(下拉列表),并且它是基于不同JSON对象的选定选项。
因此,我使用ng-repeat重复所有选项值,并使用另一个对象进行ng选择,该对象将标记该列中所有下拉列表的选定值。
每行都是从表tr标签中的不同ng-repeat处理的。
我还想让ng-change在值改变时触发函数调用。我在实现这个方面遇到了问题。
这是一个没有使用智能表(和任何其他复杂结构)的plunker
方法1:
<tr ng-repeat="objectOneRow in objectOne" >
<td>
<select ng-model="objectOneRow.selected" ng-change="optionChanged()">
<option ng-repeat="optionValue in objectTwo" ng-selected="optionValue==objectOneRow.selected">{{optionValue}}</option>
</select>
</td>
</tr>
当我在HTML的选项标签中使用ng-repeat时,如果在其选择标记中描述了ng-model和ng-change,则会插入一个空的未定义选项作为其第一个值,但是当其值为ng时,ng-change将被触发改变。
在上述方法中,ng-selected未按预期工作。我面临一个空白选项问题(因为在模型操作开始时未定义ng模型 - 在StackOverflow中similar problem)
或者,当我使用ng-options时,ng-change不会被触发(但ng-selected工作正常),因为有两个不同的对象映射到ng-model和ng-options的重复部分。
方法2:
<tr ng-repeat="objectOneRow in objectOne" >
<td>
<select ng-model="objectOneRow.selected" ng-change="optionChanged()" ng-options="objectOneRow.selected as optionValue for optionValue in objectTwo track by optionValue">
</select>
</td>
</tr>
示例JSON数据:
objectTwo = [10,20,30,40,50,60,70,80,90,100];
objectOne = [
{selected: 20},
{selected: 10},
{selected: 40},
{selected: 10},
{selected: 20},
{selected: 20},
{selected: 20},
{selected: 20},
{selected: 20},
{selected: 20}
];
在方法1中,由于空白选项值,ng-selected无效。
<option value="? string: ?"></option>
在方法2中,ng-change无效,因为ng-model和ng-options被映射到不同的对象。
注意:由于智能表为每个页面使用从0到page_max的索引,因此我也无法手动操作选定的值。