私が入力を持っています大陸と各1つは嘘ですその中の各国の 検索入力を実装して、探している国のみを表示するにはどうすればよいですか? フィルタリングされた国のリストを表示しようとしましたが、適切なものではなく各大陸に表示されます。VueJS 2つの入力フィルタグループは
答えて
まず、入力フィールドから文字列を取得し、それを検索クエリとして使用する必要があります。これは、v-model
ディレクティブによって行われ、ビューとデータを同期させた状態に保ちます。
だから、あなたのテンプレートで:
<input type="search" v-model="query">
とモデル:我々は、データをロードすると
data() {
return {
query: '',
countryList: [], // empty while data arrives
}
}
は、我々は、元のリストを保つつもりです。まだ何もしていません。私たちは後でそれをグループ化し、フィルタリングも行います。
xhr.onload = function() {
self.countryList = JSON.parse(xhr.responseText);
};
さて、あなたが表示したいの大陸はただ_.groupBy
はもうD」ではありません - 代わりに、彼らはまた、フィルタリングされます。さらに、このフィルタリングは、query
が変更されるたびに発生する必要があります。 a computed propertyの完璧な候補です。
computed: {
continents() {
const filtered = this.countryList.filter(({name}) => {
return name.toLowerCase().includes(this.query.toLowerCase())
});
return _.groupBy(filtered, "subregion");
},
},
これで、計算されたプロパティcontinents
をループするだけで済みます。
<li v-for="subregion in continents">
{{ subregion[0].subregion }}
<ul>
<li v-for="country of subregion">
{{ country.name }} ({{ country.callingCodes[0]}})</label>
</li>
</ul>
</li>
</ul>
を与えるだろう、それは使用するのと同じです: データ{ クエリ:「」、 } ? それは何もしません。そのための適切なHTMLは何ですか? –
私が知る限り、['データは関数でなければなりません](https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function)。 –
「何もしない」という意味は? 'input'フィールドの隣に' {{query}} 'を実行すると、入力中にデータが変わるのがわかります。これは、Vueの[非常に紹介している](https://vuejs.org/v2/guide/index.html#Handling-User-Input)で説明されています。 –
これを行う方法があります。
基本的に、フィルタをデータの値にバインドし、計算された値に基づいてグループ化されたリストを返します。 Vueの持つ一般的
console.clear()
new Vue({
el: "#app",
data: {
countries: null,
countryFilter: null
},
computed: {
continents() {
let filteredCountries = this.countries
let filter = c => c.name.toLowerCase().includes(this.countryFilter.toLowerCase())
if (this.countryFilter)
filteredCountries = this.countries.filter(filter)
return _.groupBy(filteredCountries, "subregion")
}
},
mounted() {
axios.get("https://restcountries.eu/rest/v2/all")
.then(response => this.countries = response.data)
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.16.2/axios.min.js"></script>
<script src="https://unpkg.com/[email protected]"></script>
<div id="app">
<input v-model="countryFilter" type="text" placeholder="filter by country name" />
<ul>
<li v-for="continent, name in continents">
{{name}}
<ul>
<li v-for="country in continent">{{country.name}}</li>
</ul>
</li>
</ul>
</div>
あなたが反応することが必要なデータの操作を実行するとき、あなたは計算されたプロパティでそれを行います。
- 1. VueJS 2先行入力のコールバックメソッド
- 2. グループデータとフィルタグループを2列(dplyr)
- 3. VueJS - 入力ファイルリピータ
- 4. は、2つの入力ベクトル
- 5. VueJS 2ディレクティブの挿入イベント
- 6. VueJSフォーム対入力イベント
- 7. VueJSコンポーネント入力同期
- 8. clipboard.jsモーダルウィンドウ2つの入力
- 9. 入力は、私はdivの中に2つの入力を持つdivの
- 10. VueJS:2つのフォームのフォーム値を入れ替える
- 11. vuejs形式の入力をクリアする
- 12. VueJS:入力チェックボックスとdiv要素のトグル
- 13. ScrollTo VueJsの無効な入力
- 14. jQueryの複数のフィルタグループ
- 15. 2つのテキストフィールド、1つの入力、1つの出力
- 16. 入力に基づくVueJSフィルタ配列
- 17. 2つのインスタンス間の通信vuejs
- 18. 2つのキー入力のユーザ入力を確認する
- 19. vuejs 2
- 20. 2つの入力、1つの出力ボタン
- 21. 2つの入力間のフィボナッチ数
- 22. 2つの入力の単一ラベル
- 23. 空白のない2つの入力
- 24. 同じ入力ボックスの2つのJquery
- 25. AngularJS - 2 1つの変数の入力
- 26. 2つの入力間の遅延java
- 27. vuejs入力モデルの場合の条件は、
- 28. 一つだけの入力は、私はjQueryのプラグインで必要な2つの入力(テキストフィールド)を持つ
- 29. JQuery 3つの入力ボックスに2つの入力ボックスの値を追加
- 30. 2つの選択タグの間にvuejs入力依存関係を作成する
あなたのjsonデータをここで共有することはできますか? –
これは正確なレスポンス=> https://restcountries.eu/rest/v2/all 私はすでにロダッシュ(サブリージョンごと)を使ってグループ化しています そして、あなたはコード内に「大陸」の代わりに「サブリージョン」を置くことができます –
https://codepen.io/blakewatson/pen/xEXApKの上に - これはあなたのアイデア –