2017-11-08 11 views
0

式として使用したときにVueにメソッドを一度呼び出すように指示する方法はありますか?Vue v-once相当物

ここに私のコードです:

<div v-for="i in a.b.c.items"> 
    <div :id="foo(i.value)"></div> 
</div> 

それが今ある方法は、FOO()メソッドは、モデルの変更、いない項目のみ上の任意の時間は何も実行されます。 Vueにはこれを一度だけ評価することができますか?このように:<div :id.only-once="foo(i.value)"

+1

理由だけではなく、 'V-for'と同じ要素には' V-once'を追加しませんか? https://jsfiddle.net/kr2gpq9L/ – thanksd

+1

上記のコメントは、静的コンテンツ(配列がいつでも変更される予定はない)に対しては完全に有効ですが、あなたの 'v-for'ループではレンダリングされません。あなたのデータが決して変更されないならば、この 'v-once'の提案を考慮してください、そうでなければあなたはそれを使うのを避けるでしょう。 –

+0

私は何が尋ねられているのか分かりません。 'foo'メソッドを各項目に対して1回だけ起動させますか?あるいは、 'a.b.c.itit '配列が更新されたときに' foo'メソッドを起動させたいのですが、 'a'プロパティの何かが変更されたときは起動しませんか? – thanksd

答えて

1

残念ながら、これは特定のイベントでのみ可能です。 this question hereにあります。代わりに考慮する可能性のあるものはcomputed propertyで、これらの値をすべて計算して配列を返します。この結果の配列はVueによってキャッシュされ、配列itemsが変更され(Vueが変更を検出するように変更されるまで)、再評価されません。

例:

Vueのセットアップ

<script> 
    new Vue({ 
     el: '. . .', 
     data: { 
      a: {b: {c: {items: [. . .]}}} 
     }, 
     methods: { 
      foo: function(val) { 
       . . . 
      } 
     }, 
     computed: { 
      itemsAfterFoo: function() { 
       var this_vue_instance = this; 
       var computed_items = []; 
       this_vue_instance.items.forEach(function(item) { 
        computed_items.push(this_vue_instance.foo(item.value)); 
       }); 
       return computed_items; 
      } 
     } 
    }); 
</script> 

テンプレート

<div v-for="(i, index) in a.b.c.items"> 
    <div :id="itemsAfterFoo[index]"></div> 
</div> 

か、その効果に何か。ここで計算された特性に

詳細情報:https://vuejs.org/v2/guide/computed.html

+0

合成可能な計算されたプロパティは、フレームワークとして多くのVueが行きたいところです。フィルタ/パイプは、Vueの式の中のメソッドと同じ問題を抱え、すべてのモデルの更新時に評価されます??? 計算されたプロパティは、私が認めなければならない非常に巧妙なJSです(getters/setters/dependency tracker)。それはちょうど私が逆の方法でそれについて考えなければならないことです。 – Elijah