2016-04-04 9 views
1

私はAPIから取り出したアイテムのセットを持っています。ベローは、私がサーバーから受け取ったデータの例です。子要素データを使用する条件付きfilterBy for v-forループ

{ 
    {"name": "example1", "price": 11, "vendor": "vendor_name1" }, 
    {"name": "example2", "price": 12, "vendor": "vendor_name2" }, 
    {"name": "example3", "price": 13, "vendor": "vendor_name3" }, 
} 

これらのループの各項目は、好みに基づいて偽から真にトグルされるデータプロパティedit: falseに割り当てられます。選択した "filterBy"を設定する方法はありますか?それはeditを持つ項目だけをフィルタリングすることができます:falseとスキップフィルタリングedit:true?

Code Pen

ありがとう:

例を参照してください。

+0

あなたは編集ですべてのオブジェクトを取得することができます: 'VAR noEdit = obj.filter(関数(x)は{!返すx.edit})'その結果を必要にどんな計算を行うと偽。 – IrkenInvader

+0

問題は、オブジェクトが子コンポーネントに渡されることです。編集:内部からfalseが割り当てられます。また、vue.jsはその親スコープのプロパティを表示しません。サーバーからフェッチされたプロパティのみが表示されます。 –

答えて

0

カスタムフィルタ設定することができます。私は編集項目をクローニングすることによって、それを達成している

<div v-for="product in products | editing"></div> 
+0

子要素と親要素内から割り当てられた「編集」プロパティがそれを認識していないため、動作しません。製品配列にこのようなプロパティがないため、フィルタは何も返しません。 [CodePen](http://codepen.io/asolopovas/pen/RajGrB?editors=0010)の例を参照してください。 –

+0

変更を親に戻して同期する必要があります。プロダクトを ':products =" products "' do'のように割り当てるのではなく、products.sync = "products" '(または、子コンポーネントのあなたのプロパティのために持っている名前) – Jeff

+0

' filterBy'を配列の場合、 'edit'を製品オブジェクトのプロパティにする必要があります。あなたが望むなら、 'Product'コンポーネントの' ready() '関数でそれを行うことができます – Jeff

1

:次に、あなたのビューでは次のようになりhttp://vuejs.org/guide/custom-filter.html

Vue.filter('editing',function(obj){ 
    return !obj.edit; 
}); 

を。 $ removeByメソッドと$ cloneを追加することにより

Vue.prototype.$removeBy = (arr, key, val) => { 
    let index = arr.findIndex((e) => e[ key ] === val); 
    if (index > -1) { 
     arr.splice(index, 1); 
    } 
}; 

Vue.prototype.$clone = (obj) => { 
    var target = {}; 
    for (var i in obj) { 
     if (obj.hasOwnProperty(i)) { 
      target[ i ] = obj[ i ]; 
     } 
    } 
    return target; 
}; 

実際の動作例はこちらです。

CodePen

関連する問題