vueデータの添削・見直し(CURD)を実現
20888 ワード
原文住所:
vueデータの添削・見直し(CURD)を実現
ガイド:データリストでは、通常、データの追加、削除、修正、検索などの操作がありますが、vueを使用するとどのように実現されますか.
管理者の一部のバックグラウンドページでは、パーソナルセンターのデータリストに、これらのデータを削除して調べる操作があります.例えば、管理者のバックグラウンドのユーザーリストには、新しいユーザーの情報を入力したり、既存のユーザー情報を変更したりすることができます.vueでは、データの操作と処理に集中する必要があります.
たとえば、次のようなページがあります.
このページでは、4つの機能を追加削除して検索し、リンクをクリックしてdemoを表示します.http://www.xiabingbao.com/demo/vue-curd/index.html】.
これらのユーザ情報を
これらのデータを設定するのは主にvueのフォームに対する処理操作を復習します.この中のフォームには、テキスト入力ボックス、ラジオボタン、select選択ボックス、チェックボックスなどがあります.
1.展示データ
我々のデータはすべて配列
vueには
次にhtmlで
「≪アクション|Actions|emdw≫」欄で、変更および削除操作にイベントをバインドします.
2.機能の追加と削除
追加機能と削除を統合するのは、どちらの機能も比較的簡単です.
原文住所:http://www.xiabingbao.com/vue/2017/07/10/vue-curd.html
ユーザーを追加するには、
これでffffのユーザーを追加できます.
ユーザーを削除する場合、
3.修正機能
ある要素を修正したい場合は、この位置のデータを取り出して弾層(または他の位置)に置くことができ、弾層の情報はキャンセルまたは修正して保存することができます.
原文住所:http://www.xiabingbao.com/vue/2017/07/10/vue-curd.html
私たちの弾層のデータが
弾層の情報を変更すると、テーブルのデータも同期して更新されるという問題が見つかりましたか.しかし、私たち自身は保存ボタンをクリックしたときに、弾層のデータを表に保存したいと思っています.問題の根源はここにある.
ユーザーがデータを変更するとselectedlistが変化し、保存ボタンをクリックするとindex位置にデータを再保存します.
4.クエリー機能
第1節では、ページテーブルに
フィルタされたデータをいくつかの条件に基づいてslist配列に割り当てるたびに、クエリ後のデータが表示されます.ここで、クエリは2つの小さな機能を実現しました.
ユーザは、ある文字を入力と、ユーザが問い合わせる可能性のある単語(ユーザ名など)を入力ボックスの下に自動的にリストで示す.
同期更新テーブルのデータここでは、ユーザー名とメールボックスでクエリーを行うため、データをフィルタリングする際に、ユーザー名とメールボックスにクエリーの単語が含まれているかどうかを検出する必要があります.まず、入力ボックスにinputイベントをバインドし、datalistでユーザーがクエリーする可能性のある言葉を示します.
search機能の実装では、
ユーザーが文字を入力または削除するたびにsearchメソッドが呼び出され、クエリー操作が実行され、クリックで単語リストを表示するとsearchメソッドも呼び出されます.
5.弾層を独立して構成要素とする
実際には、修正機能(または新規機能)はコードとスタイルから相対的に独立しており、弾層をコンポーネントの形式に独立させ、修正が必要なデータを
親コンポーネントは、親コンポーネントで
6.まとめ
多くのことを書いていますが、実は中の難点はあまり多くありません.主にformフォームの操作で、もう一つはコンポーネント間のデータとイベントの伝達を練習します.内容は比較的簡単で、皆さんの批判と指摘を歓迎します.
vueデータの添削・見直し(CURD)を実現
ガイド:データリストでは、通常、データの追加、削除、修正、検索などの操作がありますが、vueを使用するとどのように実現されますか.
管理者の一部のバックグラウンドページでは、パーソナルセンターのデータリストに、これらのデータを削除して調べる操作があります.例えば、管理者のバックグラウンドのユーザーリストには、新しいユーザーの情報を入力したり、既存のユーザー情報を変更したりすることができます.vueでは、データの操作と処理に集中する必要があります.
たとえば、次のようなページがあります.
このページでは、4つの機能を追加削除して検索し、リンクをクリックしてdemoを表示します.http://www.xiabingbao.com/demo/vue-curd/index.html】.
これらのユーザ情報を
list
の配列に保存し、削除変更をこの配列で行います.JSlist: [
{
username: 'aaaaa',
email: '[email protected]',
sex: ' ',
province: ' ',
hobby: [' ', ' ', ' ']
},
{
username: 'bbbbb',
email: '[email protected]',
sex: ' ',
province: ' ',
hobby: [' ', ' ', ' ']
}
// ...
]
これらのデータを設定するのは主にvueのフォームに対する処理操作を復習します.この中のフォームには、テキスト入力ボックス、ラジオボタン、select選択ボックス、チェックボックスなどがあります.
1.展示データ
我々のデータはすべて配列
list
に配置されているが、ここではlistを直接循環出力するのではなく、listのデータを1つの配列slist
に渡し、slist
を循環出力する.後続のクエリー機能ではデータをフィルタリングする必要があるため、配列listは元のデータ(新規、変更後、または削除後を含む)を保存し続け、配列slistは表示のみを担当します.vueには
setSlist
メソッドが提供され、表示する必要があるデータを配列slistに与えます.JS//
setSlist(arr) {
this.slist = JSON.parse(JSON.stringify(arr));
}
次にhtmlで
v-for
を使用してslist配列をレンダリングします.HTML<tr v-cloak v-for="(item, index) of slist">
<td>{{index+1}}td>
<td>{{item.username}}td>
<td>{{item.email}}td>
<td>{{item.sex}}td>
<td>{{item.province}}td>
<td>{{item.hobby.join(' | ')}}td>
<td><a href="javascript:;" @click="showOverlay(index)"> a> | <a href="javascript:;" @click="del(index)"> a>td>
tr>
「≪アクション|Actions|emdw≫」欄で、変更および削除操作にイベントをバインドします.
2.機能の追加と削除
追加機能と削除を統合するのは、どちらの機能も比較的簡単です.
原文住所:http://www.xiabingbao.com/vue/2017/07/10/vue-curd.html
ユーザーを追加するには、
push
メソッドを使用して、list
配列の最後にユーザーの情報を追加します.JSthis.list.push({
username: 'ffff',
email: '[email protected]',
sex: ' ',
province: ' ',
hobby: [' ', ' ']
});
これでffffのユーザーを追加できます.
ユーザーを削除する場合、
splice(index, 1)
でindex位置のデータを削除することができ、ページ上のデータは自動的に更新されます.3.修正機能
ある要素を修正したい場合は、この位置のデータを取り出して弾層(または他の位置)に置くことができ、弾層の情報はキャンセルまたは修正して保存することができます.
原文住所:http://www.xiabingbao.com/vue/2017/07/10/vue-curd.html
私たちの弾層のデータが
selectedlist
であると仮定すると、修正するたびにindex位置のデータをselectedlistに渡し、弾層の中でselectedlistを修正します.修正データのタイプも見られます.テキストボックス(ユーザー名、メールボックス)、ラジオボタン(性別)、select選択ボックス(所在省)、マルチ選択ボックス(趣味)、ここではフォーム処理(https://cn.vuejs.org/v2/guide/forms.html).弾性層が変数isActive
で制御されるかどうか:JS//
modifyData(index) {
this.selected = index; //
this.selectedlist = this.list[index];
this.isActive = true;
}
弾層の情報を変更すると、テーブルのデータも同期して更新されるという問題が見つかりましたか.しかし、私たち自身は保存ボタンをクリックしたときに、弾層のデータを表に保存したいと思っています.問題の根源はここにある.
JSthis.selectedlist = this.list[index];
list[index]
はObjectタイプのデータであるため、=賦値を使用すると賦値操作は浅度コピー(データのアドレスを対応する変数に賦値し、具体的なデータを変数にコピーせず、変数はデータ値の変化に伴って変化する)となり、selectedlistとlist[index]は同じデータアドレスを使用し、互いにデータ値の変化を引き起こす.ここでは、深度コピーを行う必要があります.JSthis.selectedlist = JSON.parse( JSON.stringify(this.list[index]) ); // ,
ユーザーがデータを変更するとselectedlistが変化し、保存ボタンをクリックするとindex位置にデータを再保存します.
JS/*
this.list
this.selected
this.selectedlist
*/
Vue.set(this.list, this.selected, this.selectedlist);
4.クエリー機能
第1節では、ページテーブルに
slist
のデータが表示されているのは、クエリー操作を容易にするためです.JS//
setSlist(arr) {
this.slist = JSON.parse(JSON.stringify(arr));
}
フィルタされたデータをいくつかの条件に基づいてslist配列に割り当てるたびに、クエリ後のデータが表示されます.ここで、クエリは2つの小さな機能を実現しました.
ユーザは、ある文字を入力と、ユーザが問い合わせる可能性のある単語(ユーザ名など)を入力ボックスの下に自動的にリストで示す.
同期更新テーブルのデータここでは、ユーザー名とメールボックスでクエリーを行うため、データをフィルタリングする際に、ユーザー名とメールボックスにクエリーの単語が含まれているかどうかを検出する必要があります.まず、入力ボックスにinputイベントをバインドし、datalistでユーザーがクエリーする可能性のある言葉を示します.
HTML<input type="text" placeholder="search" @input="search" list="cars" class="search">
<datalist id="cars">
<option v-for="item in searchlist" :value="item">option>
datalist>
search機能の実装では、
searchlist
は入力ボックスの下に表示される検索可能な語であり、ss
配列はフィルタリングされたデータを保存し、ループが完了した後、setSlist
を呼び出す方法を設定してslist配列を修正する.JS//
search(e) {
var v = e.target.value,
self = this;
self.searchlist = [];
if (v) {
var ss = [];
//
this.list.forEach(function (item) {
//
if (item.username.indexOf(v) > -1) {
if (self.searchlist.indexOf(item.username) == -1) {
self.searchlist.push(item.username);
}
ss.push(item);
} else if (item.email.indexOf(v) > -1) {
//
if (self.searchlist.indexOf(item.email) == -1) {
self.searchlist.push(item.email);
}
ss.push(item);
}
});
this.setSlist(ss); // slist
} else {
// ,
this.setSlist(this.list);
}
}
ユーザーが文字を入力または削除するたびにsearchメソッドが呼び出され、クエリー操作が実行され、クリックで単語リストを表示するとsearchメソッドも呼び出されます.
5.弾層を独立して構成要素とする
実際には、修正機能(または新規機能)はコードとスタイルから相対的に独立しており、弾層をコンポーネントの形式に独立させ、修正が必要なデータを
props
を介してコンポーネントに渡し(新規データの場合、コンポーネントに空のデータを渡すことができる)、ユーザーが保存をクリックすると、さらに$emit
を介して親コンポーネント(サブコンポーネントは直接親のデータを与えることができず、dataまたはcomputedでローカル変数を生成し、$emitメソッドを使用してこのローカルデータを再伝達する必要があります):JS//
Vue.component('model', {
props: ['list', 'isactive'],
template: `,
`computed: {
modifylist() {
return this.list;
}
},
methods: {
changeActive() {
this.$emit('change'); // , isactive
},
modify() {
this.$emit('modify', this.modifylist); //
}
}
});
親コンポーネントは、親コンポーネントで
change
およびmodify
イベントを切り取り、changeOverlay
およびmodify
で実装される.HTML<model :list='selectedlist' :isactive="isActive" v-cloak @change="changeOverlay" @modify="modify">model>
6.まとめ
多くのことを書いていますが、実は中の難点はあまり多くありません.主にformフォームの操作で、もう一つはコンポーネント間のデータとイベントの伝達を練習します.内容は比較的簡単で、皆さんの批判と指摘を歓迎します.