2017-11-07 4 views
0

clickイベントで要素の特定のgrand-parentノードを削除したいテーブルがあるボタン。 TRにトラバースしてDOMから削除したい。それはそのままで、コードは何もせず、エラーも削除も発生しません。Vue Js - クリック時にテーブルからTR grand-parentノードを削除する方法を試行する

どのようにこれを達成できますか?

スクリプトの例:

data() { 
     return { 
      items: [] 
     } 
     }, 
methods: { 
      deleteItem(event){ 
       let con = confirm('Are you sure?'); 
       if(con) { 
        let par = event.target.parentNode.parentNode; 
        for(let i = 0; i < par.length; i++) { 
         if(event) { 
         this.items.items.splice(i, 1); 
         } 
        } 
       } 
      }, 
    } 

表例:

<table> 
    <thead> 
     <tr> 
     <th>Item</th> 
     <th>Delete</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr v-for="item in items"> 
     <td><input type="text" v-model="item.q" required></td> 
     <td><button v-on:click.prevent="deleteItem">X</button></td> 
     </tr> 
    </tbody> 
</table> 

..あなただけのitemを削除してみましょうことができ、コメントに引き続き

-S

+1

、あなたは避けなければなりませんそれを手動で操作します。この場合、アイテムを 'items'から削除して、再レンダリングで削除するようにしてください。 – Matt

+0

@Matt Thanks Matt。しかし、どうすればそれを取り除くことができますか?私はここや他のフォーラムで見たたくさんの方法を試しましたが、エラーを取り除いてスローするか、エラーをスローして削除しません。 – Sergio

答えて

3

をありがとう再レンダリングで古いDOMが削除されます。

など。現在の項目の参照を渡すためにあなたのハンドラを変更します。

v-on:click.prevent="deleteItem(item)"

次に、あなたのdeleteItem方法でそれをフィルタリング:

deleteItem(item) { 
    this.items = this.items.filter(it => it !== item); 
} 

全例:Vueのは、宣言型のDOMを使用していますhttps://codepen.io/anon/pen/POGgWp

+0

これはうまくいきました。実際に何が削除されているのか説明できますか?フィルター機能ですか?以前は使わなかった – Sergio

+0

あなたがそれに精通すれば、VueはReactのようです。基本的に、いつでも(ここでは 'data'の何かが)更新されると、Vueはその新しい状態に基づいてテンプレートを再描画します。次にVueは最後のレンダリング以降の差分を検出し、DOMの必要な変更を行います(これは「連結」と呼ばれます)。 [Vue guide](https://vuejs.org/v2/guide/index.html#Declarative-Rendering)は、もっと読むのに適した開始場所です – Matt

+0

ああ、意味があります。だから私たちは本当に "削除"とマークしたアイテムがなくても新しいインスタンスを作成して代わりにレンダリングしているわけではありません - 私はこの前提で正しいトラックにいますか?もう一度ありがとう。 – Sergio

関連する問題