複数のコンポーネントを使用してデータをフィルタリングする方法

fkaufusi

私がしたいのは、左側のラジオボタンをクリックすると、右側のコンテンツがフィルタリングされて、同じ場所だけが表示されるようにすることです。

誰かがラジオボタンをクリックしたときにイベントを発行する方法がわかりません。

このvueコードではxテンプレートを使用しています。

const locations = {
    options: [
        {
            title: 'A',
            value: 'a'
        },
        {
            title: 'B',
            value: 'b'
        },
        {
            title: 'C',
            value: 'c'
        }]
};
const team = {
    options: [
        {
            name: 'Team A',
            location: 'a'
        },
        {
            name: 'Team B',
            location: 'b'
        },
        {
            name: 'Team C',
            location: 'c'
        }]
};

Vue.component('location-filter', {
    template: '#location-filter',
    props: {
        location: {
            type: Array,
            required: true
        }
    }

});


new Vue({
    el: '#location-finder',
    data: {
        location: locations.options,
        teams: team.options
    }
});
.page {
    padding:5px;
    border:1px solid #cccccc;
    display:flex;
    flex-flow:row;
}

.sidebar {
    flex-grow:0.6;
    border: 1px solid red;
    padding:10px;
}

.body {
    padding:10px;
    border:1px solid blue;
    flex-grow:1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

    <div class="page" id="location-finder">
    <div class="sidebar">
    <location-filter :location="location"></location-filter>
    </div>
    <div class="body">
    <div v-for="team in teams">
    <div>{{ team.name }}</div>
</div>
</div>
</div>

<script type="text/x-template" id="location-filter">
    <div>
    <div v-for="place in location">
    <label>
<input type="radio" name="place" value="place.value">{{ place.title }}
</label>
</div>
</div>
</script>

うまくいけば、私の説明とコードで、私が達成しようとしていることの全体像を把握するのに十分です。

そして

次のように、ユーザーが無線ラベルをクリックしたときなど、コンポーネントの内部からカスタムイベントを発行できます。

<label @click="$emit('location', place.value)">

イベントに名前を付けましたlocationこれlocationで、次のように親のテンプレート(locationFinder)で指定さたイベントをリッスンできます

<location-filter :location="location" @location="changeLocation">

ここで、そのイベントが発行さlocationFinderれるchangeLocationたびに呼び出されるインスタンス内のメソッドを呼び出そうとしますlocationそのメソッドは次のようになります。

changeLocation(location) {
    this.selected = location;
}

selected選択した場所に呼び出されるデータプロパティを設定していることがわかります。したがってteamsそのselected場所を確認するためにループが必要になり、その場所が選択した場所と一致する場合にのみチームを表示します。これを行う最良の方法computedは、チームリストのフィルタリングされたバージョンを常に含むプロパティを作成することです。選択したチームがない場合は、すべてのチームが返されます。

filtered() {
    if (this.selected) {
        return this.teams.filter(team => team.location == this.selected);
    } else {
        return this.teams;
    }
}

最後に、テンプレートを更新してfiltered、フィルタリングされていないリストではなく、このチームリストをループします

<div v-for="team in filtered">

更新されたスニペットを含めました。

const locations = {
    options: [
        {
            title: 'A',
            value: 'a'
        },
        {
            title: 'B',
            value: 'b'
        },
        {
            title: 'C',
            value: 'c'
        }]
};
const team = {
    options: [
        {
            name: 'Team A',
            location: 'a'
        },
        {
            name: 'Team B',
            location: 'b'
        },
        {
            name: 'Team C',
            location: 'c'
        }]
};

Vue.component('location-filter', {
    template: '#location-filter',
    props: {
        location: {
            type: Array,
            required: true
        }
    }

});


new Vue({
    el: '#location-finder',
    data: {
        location: locations.options,
        teams: team.options,
        selected: null
    },
    computed: {
        filtered() {
            if (this.selected) {
                return this.teams.filter(team => team.location == this.selected);
            } else {
                return this.teams;
            }
        }
    },
    methods: {
        changeLocation(location) {
            this.selected = location;
        }
    }
});
.page {
    padding:5px;
    border:1px solid #cccccc;
    display:flex;
    flex-flow:row;
}

.sidebar {
    flex-grow:0.6;
    border: 1px solid red;
    padding:10px;
}

.body {
    padding:10px;
    border:1px solid blue;
    flex-grow:1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

    <div class="page" id="location-finder">
    <div class="sidebar">
    <location-filter :location="location" @location="changeLocation"></location-filter>
    </div>
    <div class="body">
    <div v-for="team in filtered">
    <div>{{ team.name }}</div>
</div>
</div>
</div>

<script type="text/x-template" id="location-filter">
    <div>
    <div v-for="place in location">
    <label @click="$emit('location', place.value)">
<input type="radio" name="place" value="place.value">{{ place.title }}
</label>
</div>
</div>
</script>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

複数のコンボボックスを使用してデータをフィルタリングする方法

分類Dev

複数のコンボボックスを使用してデータをフィルタリングする方法

分類Dev

2つのコンポーネントを使用して検索でフィルタリングする方法[reactjs]

分類Dev

Spring JPAリポジトリを使用して複数のフィールドでエンティティをフィルタリングする方法は?

分類Dev

データ検証を使用して複数のシートをフィルタリングする

分類Dev

データ属性に基づいて複数のコンポーネントをレンダリングする

分類Dev

ObjectiveCを使用してiOSのコアデータからデータをフィルタリングする方法

分類Dev

ナビゲーションコンポーネントの引数を使用して複数のフラグメントにデータを渡す

分類Dev

複数選択の剣道を使用してデータソースをフィルタリングする

分類Dev

ネストされたlapplyを使用して基準をフィルタリングし、複数のデータフレームを作成します

分類Dev

複数のパラメータを使用して同じコンポーネントにルーティングする

分類Dev

ListViewの複数のデータを使用して「get_context_data」をフィルタリングする

分類Dev

iptablesを使用して、複数のドメインを持つ特定のポートのトラフィックをフィルタリングする

分類Dev

@Inputを使用して複数のデータを子コンポーネントに渡す方法

分類Dev

ReactJS)PHPからXMLHttpRequestを使用してデータを取得し、そのデータを兄弟コンポーネント内にレンダリングする方法

分類Dev

関数を使用してFirestoreコレクションデータをフィルタリングする方法(位置距離フィルタリング用)

分類Dev

スマートコンポーネント内で2つの引数を使用するメソッドを使用して、スマート/ダムコンポーネントのコンポーネントをリファクタリングする

分類Dev

Rを使用して複数の基準に基づいてレコードをフィルタリングするエレガントな方法

分類Dev

複数のデータ行でOracleSQLを使用して行をフィルタリングする

分類Dev

mysqlで複数のAND演算子を使用してデータをフィルタリングする

分類Dev

リストを使用してPandasデータフレームをフィルタリングする最速の方法

分類Dev

BPFを使用してカーネル関数の引数をフィルタリングする方法は?

分類Dev

重複をフィルタリングしてマージするカスタムスクリプトコンポーネントSSIS

分類Dev

reactjsで複数のコンポーネントを使用してデータを挿入する

分類Dev

javascriptの複数のオプションに基づいてネストされたデータをフィルタリングする方法は?

分類Dev

コンポーネントダイアログでタグをフィルタリングする方法。Adobe CQ

分類Dev

Reactルーターパスは複数のコンポーネントをレンダリングします

分類Dev

python / pandas-列のコンポーネントでデータフレームをフィルタリングする方法

分類Dev

親のデータを更新するコンポーネントとしての入力フィールド

Related 関連記事

  1. 1

    複数のコンボボックスを使用してデータをフィルタリングする方法

  2. 2

    複数のコンボボックスを使用してデータをフィルタリングする方法

  3. 3

    2つのコンポーネントを使用して検索でフィルタリングする方法[reactjs]

  4. 4

    Spring JPAリポジトリを使用して複数のフィールドでエンティティをフィルタリングする方法は?

  5. 5

    データ検証を使用して複数のシートをフィルタリングする

  6. 6

    データ属性に基づいて複数のコンポーネントをレンダリングする

  7. 7

    ObjectiveCを使用してiOSのコアデータからデータをフィルタリングする方法

  8. 8

    ナビゲーションコンポーネントの引数を使用して複数のフラグメントにデータを渡す

  9. 9

    複数選択の剣道を使用してデータソースをフィルタリングする

  10. 10

    ネストされたlapplyを使用して基準をフィルタリングし、複数のデータフレームを作成します

  11. 11

    複数のパラメータを使用して同じコンポーネントにルーティングする

  12. 12

    ListViewの複数のデータを使用して「get_context_data」をフィルタリングする

  13. 13

    iptablesを使用して、複数のドメインを持つ特定のポートのトラフィックをフィルタリングする

  14. 14

    @Inputを使用して複数のデータを子コンポーネントに渡す方法

  15. 15

    ReactJS)PHPからXMLHttpRequestを使用してデータを取得し、そのデータを兄弟コンポーネント内にレンダリングする方法

  16. 16

    関数を使用してFirestoreコレクションデータをフィルタリングする方法(位置距離フィルタリング用)

  17. 17

    スマートコンポーネント内で2つの引数を使用するメソッドを使用して、スマート/ダムコンポーネントのコンポーネントをリファクタリングする

  18. 18

    Rを使用して複数の基準に基づいてレコードをフィルタリングするエレガントな方法

  19. 19

    複数のデータ行でOracleSQLを使用して行をフィルタリングする

  20. 20

    mysqlで複数のAND演算子を使用してデータをフィルタリングする

  21. 21

    リストを使用してPandasデータフレームをフィルタリングする最速の方法

  22. 22

    BPFを使用してカーネル関数の引数をフィルタリングする方法は?

  23. 23

    重複をフィルタリングしてマージするカスタムスクリプトコンポーネントSSIS

  24. 24

    reactjsで複数のコンポーネントを使用してデータを挿入する

  25. 25

    javascriptの複数のオプションに基づいてネストされたデータをフィルタリングする方法は?

  26. 26

    コンポーネントダイアログでタグをフィルタリングする方法。Adobe CQ

  27. 27

    Reactルーターパスは複数のコンポーネントをレンダリングします

  28. 28

    python / pandas-列のコンポーネントでデータフレームをフィルタリングする方法

  29. 29

    親のデータを更新するコンポーネントとしての入力フィールド

ホットタグ

アーカイブ