2017-11-02 11 views
0

아래에 다음 선택 목록이 있습니다. ngSelected는 표현식의 값을 올바르게 선택하지만 select 모델은 이에 따라 업데이트되지 않습니다. "높음"값을 선택할 수 있으며 ngSelected 트리거가 있으면 빈 값이 표시되지만 모델은 "높음"으로 유지됩니다.ngSelected가 ngModel을 업데이트하지 않습니다. [AngularJS]

누구든지 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

이것은 angular official site에서 가져옵니다.

참고 : ngSelected는 select 및 ngModel 지시문과 상호 작용하지 않으며 요소에서 선택한 속성 만 설정합니다. 이 선택 항목에서 ngModel을 사용하는 경우 옵션에서 ngSelected를 사용하면 안됩니다. ngModel이 선택 값과 선택한 옵션을 설정하기 때문입니다.

그렇습니다. 컨트롤러에서 모델을 초기화하고 ng 선택 지시문을 제거해야합니다.

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; 
    }; 
    } 
} 
+0

이는 초기화 또는이 함수가 호출 될 때마다에서 작동합니다. 오타가 아니라 사용자 정의 필터 –

+0

ngSelected에 대한 정보를 가져 주셔서 감사합니다. –

+0

또는'ng-init'을 사용하여보기에서 모델을 초기화 할 수는 있지만 그렇게 좋지는 않습니다. – Korte

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>