2016-07-01 10 views
11

Bir ön çerçevede açılır menüleri dolduracağım ve bir ifade temelinde her bir aşağı açılan değer için varsayılan değeri ayarlamak istiyorum. Bu çalışıyor gibi görünüyor ama benim sorunum, ng-selected üzerinden varsayılan değeri ayarladığımda, ideal olmayan değişim olayını da tetikliyor.Açısal: Düşüşler, ng değişimini tetiklemeyi önler

Bu değişiklik olayı gerçekten değiştirilirse değişiklik olayının yalnızca kovulmasını istiyorum. opsiyon elemanları üzerinde tekrarlanması açılan

+1

ngModel değerini kullanarak değeri –

cevap

4

için açısal malzeme kullanılması

<div layout="row" ng-if="layer.Styles && layer.Styles.length > 1"> 
    <md-input-container class="md-icon-float md-block layer-style"> 
     <md-select ng-change="vm.changeLayerStyle(layer,selectedStyle)" ng-model="selectedStyle" ng-model-options="{trackBy: '$value.Name'}" aria-label="Change Layer Style"> 
      <md-option ng-repeat="style in layer.Styles" ng-value="style" ng-selected="style.IsDefault == true"> 
       {{style.DisplayName}} 
      </md-option> 
     </md-select> 
    </md-input-container> 
</div> 

insanların sorunları vererek bir geçmişi var. Normalde bunun yerine ng-options'u kullanmayı tercih ediyorum, ancak bazı malzeme bileşenlerini kullanmanız gerektiğinden, bu bir seçenek değildir.

Bunun en güzel çözüm olmadığını biliyorum, ancak bu sorunu, son değerin bir kopyasını tutarak ve değişiklik olayı tetiklendikten sonra geçerli olanla karşılaştırarak çözebilirsiniz. Bu değer değişmemişse, etkinliği yok sayın. Bu, layer.Styles'un ayarlanması büyük olasılıkla çok sayıda güncellemeyi tetikleyeceğinden bazı ekstra düzenlemelere ihtiyaç duyabilir.

Bize oynamak için bir plunker vermediğiniz için, updateOn mülkünü updateOn mülküyle ng-model-options (zaten kontrol etmek için kullanıyorsunuz) ile oynamanızı ve bunu yapmadığınız bir şeye ayarlamanızı öneririz. Seçtiğiniz özelliği ayarlayarak tetiklenir. Burada blur değeri akla geliyor.

+0

olarak ayarlamayı deneyin. Evet, ilk seçeneğinizle gittim, ng-change üzerinde çağrılan işlevde (serviceLayer.Style === style.Name) return; ve bu bana istediğimi veriyor. Tekrarlayıcıda kontrol etmek güzel olurdu ama iyi – StevieB