下面我有以下选择列表。 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>
答案 0 :(得分:0)
注意: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>