ngSelected不更新ngModel [AngularJS]

时间:2017-11-02 19:11:30

标签: angularjs angular-ngmodel

下面我有以下选择列表。 ngSelected确实正确选择表达式中的值,但select的模型不会相应地更新。我可以选择"高"值,当ngSelected触发时,显示空值但模型保持为"高"。

有人知道如何在触发ngSelected后以编程方式设置ngModel吗? ngSelected中的表达式来自div的指令,因此我无法在其上附加ngChange。

<select class="form-control" name="alertLevel-{{$index}}" ng-model="template.service.readings[$index].repeatBreachAlert.repetitiveAlertLevel" title="Please select an alert level">
      <option ng-selected="template.service.firstLevelMessage.below.messages | messagesLength.length === 0" value=""></option>
      <option value="Valid">Valid</option>
      <option value="High">High Alert</option>
      <option value="Low">Low Alert</option>
</select>

2 个答案:

答案 0 :(得分:0)

这取自angular official site

  

注意:ngSelected不与select和ngModel交互   指令,它只在元素上设置selected属性。如果你   在select上使用ngModel时,不应该使用ngSelected   选项,因为ngModel将设置选择值和选定的选项。

话虽如此。 您应该在控制器中初始化模型并删除ng-selected指令。

这样的事情会起作用:

function initializeModel() {
  for (let i; i < whatEverMyIterationLooksFor; i++) { // I suppose you are using ng-repeat in template so here you should iterate through the relevant scope.
    const shouldBeEmpty = template.service.firstLevelMessage.below.messages || messagesLength.length === 0; // You also had a typo here with the OR operator.

    if (shouldBeEmpty) {
      template.service.readings[i].repeatBreachAlert.repetitiveAlertLevel = null;
    };
  }
}

答案 1 :(得分:0)

用于在视图中设置模型以解决此答案:

<span class="ng-hide">
   {{((template.service.firstLevelMessage.above.messages | messagesLength).length === 0  && template.service.readings[$index].repeatBreachAlert.repetitiveAlertLevel !== 'Valid' ? template.service.readings[$index].repeatBreachAlert.repetitiveAlertLevel = '' : '' }}
</span>