2017-07-13 9 views
1

私はセマンティックUIドロップダウンを新しい値で更新しようとしています。 Vueは正しく更新されていますが、私はセマンティックUIドロップダウンをリフレッシュしていますが、まだ更新していません。私はキーの使用を述べた別の記事を見たが、それでも失敗する。vueでセマンティックUIドロップダウンリストを更新するにはどうすればよいですか?

テンプレート

<div id=root> 
    <label>Type:</label> 
    <select id="app_type" class="ui search selection dropdown" v-model="model_type_val"> 
    <option v-for="model_type in model_types" v-bind:value="model_type.value" v-bind:key="model_type.value">{{model_type.text}}</option> 
    </select> 
    <p> 
    selected: {{model_type_val}} 
    </p> 
</div> 

コード

var model_types2= [ 
    {value:"",text:"Type"}, 
    {value:"type1",text:"Type1a"}, 
    {value:"type2",text:"Type2a"}, 
    {value:"type3",text:"Type3a"}, 
    {value:"type4",text:"Type4"}  
]; 

var vm2= new Vue({ 
    el:'#root', 
    data:{ 
    model_type_val:"", 
    model_types:[ 
     {value:"",text:"Type"}, 
     {value:"type1",text:"Type1"}, 
     {value:"type2",text:"Type2"}, 
     {value:"type3",text:"Type3"} 
    ] 
    }, 
    mounted: function(){ 
    $('#app_type').dropdown(); 
    setTimeout(function() { 
     this.model_types=model_types2; 
     alert(this.model_types[1].text); 
     $('#app_type').dropdown('refresh');    
    }, 1000); 
    } 
}); 

私はthis jsfiddleでコードを再現しようとしました。

答えて

1

あなたはthisの問題があります。 thisを使用するVueメソッドまたはライフサイクルフック内にコールバックがある場合は、thisが正しいオブジェクト(Vue)を指していることを確認する必要があります。矢印の機能、クロージャー、またはbindでそれを行います。

setTimeout(() => { 
    this.model_types=model_types2; 
    $('#app_type').dropdown('refresh');    
}, 1000); 

ここにはfiddle updatedがあります。

注:フィドルでは、セレクタをrefに変更しました。通常は、Vueを操作するときにjQueryを離れることを開始します。

How to access the correct this inside a callbackを参照してください。

+0

恐縮です、ありがとう! jquery tipも好きです。私は前にrefを使っていません。私はずっとjqueryを使ってきましたが、何かを素早く書き込もうとすると、私のデフォルトです。私はvueに移動するときにそれを逃れることを望んでいた。意味論はそれを使用します。 :) – user2265754

+0

私は最後の要素を削除し、エントリの1つのテキストのみを変更するためにjsfiddleを変更しました。なぜそれが更新されないのか知っていますか? https://jsfiddle.net/tvinci/5dkb2r62/ – user2265754

+0

@ user2265754それは 'key'、' model_type.value'のためだと思います。これをキーとして使用し、オプションを同じ 'key'を持つリストに置き換えることで、Vueはオリジナルを再利用しています。以前にも起こらなかった奇妙なようだ。私は[コードを更新しました](https://jsfiddle.net/5dkb2r62/1/)を変更しましたが、必要ではないと思ういくつかの行を削除しました。 – Bert

関連する問題