よろしくお願い致します。
vue.jsでフィルタをかけた後に、リストを再表示させるとjQueryで追加した要素が消えてしまうという現状に遭遇しております。
動作の流れ
1、ロード時、リストが全件表示される(v-forでの処理)
2、jQueryでdivのインナーにHTML要素を追加する
3、vue.jsでフィルタを掛け、表示件数の絞りこみを行う(一度0件にする)
4、vue.jsのフィルタを解除し、リストを再表示させる
5、jQueryで追加をしたHTML要素が消えてしまっている
実際に使用しているコードは下記になります。
HTML
<div id="app"> <input type="checkbox" checked v-model="show1" data-category="1"> <input type="checkbox" checked v-model="show2" data-category="2"> <input type="checkbox" checked v-model="show3" data-category="3"> <div class="item" v-for="product in List" :key="product.id" > <label><div class="detail">{{product.title}} <div class="inner" ></div></div> </label> </div> </div> <script> $(function() { setTimeout(function(){ $('.inner').each(function(index) { $(this).append('<button onClick="add_link(' + index + ')"/>' + '' + '</button>'); }); },3000); }); </script>
vue
var app = new Vue({ el: '#app', data: { show1: true, show2: true, show3: true, products: [], }, computed: { List: function() { var newList = []; for (var i=0; i<this.products.length; i++) { var isShow = true; if (!this.show1 && this.products[i].type == 1) { isShow = false; } if (!this.show2 && this.products[i].type == 2) { isShow = false; } if (!this.show3 && this.products[i].type == 3) { isShow = false; } if (isShow) { newList.push(this.products[i]); } } // 絞り込み後の商品リストを返す return newList; } }, }); //配列(products)取り出しの記述は省略しております。
知りたいこと
・vue.jsでフィルタを掛け表示件数の絞りこみを行った後、再表示をさせた際にjQueryで追加をしたHTML要素を維持させておくことはできるのかどうか。(なぜ消えてしまうのかも知りたいです。)
・上記を行いたい場合、他にいい記述方法などがあるのかどうか
回答1件
あなたの回答
tips
プレビュー