故障选择使用ngRepeat(或ngOptions),ngModel,ngChange和ngSelected时选择选项下拉列表

时间:2017-06-19 11:34:29

标签: javascript angularjs ng-options angularjs-select

我有一个智能表,其中一列包含基于一个对象的选择选项(下拉列表),并且它是基于不同JSON对象的选定选项。

因此,我使用ng-repeat重复所有选项值,并使用另一个对象进行ng选择,该对象将标记该列中所有下拉列表的选定值。

每行都是从表tr标签中的不同ng-repeat处理的。

我还想让ng-change在值改变时触发函数调用。我在实现这个方面遇到了问题。

这是一个没有使用智能表(和任何其他复杂结构)的plunker

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的索引,因此我也无法手动操作选定的值。

0 个答案:

没有答案