概要バックグラウンド管理システムには多くのフォーム要件があります。データをjson 形式で書き込み、vue ループを通じて動的フォームを動的にレンダリングできるようになることを期待しています。また、レンダリングされたフォームデータを外部から取得し、ウェアハウス操作を実行することも可能である。 Vモデルを理解するvue-model は、フォーム要素に値を渡し、外部で入力イベントをリッスンすることと同じです。したがって、フォーム コンポーネントを独自にカプセル化すると、値を渡して入力イベントをリッスンし、入力値を取得することもできます。 <input type="text" v-model="もの"> <!-- 以下と同等 --> <input type="text" v-bind:value="thing" v-on:input="もの = $イベントターゲット値"> ビジネスアプリケーションシナリオ最近、オンライン教育プラットフォームを作成していたのですが、バックグラウンドでコースを追加するときに、各コースに必要なパラメータが異なることがわかりました (一部のコースには特別なパラメータがありませんでした)。このシナリオで固定フォームを使用することはエレガントではなく、作業負荷が膨大でした。この問題を解決するために、コースを追加するときにコース分類フォームに必要なパラメータを動的に表示し、入力されたコースパラメータを取得し、データを構築し、保存操作を実行できます。 コンポーネントを通じてカテゴリを表示する <!-- reply.vue --> <テンプレート> <div> <li> <div v-if="data.id != 0" @click="getfid(data.id)" :id="data.id"> {{ data.name }}</div> <ul v-if="data.children && data.children.length > 0"> <Reply v-for="child in data.children" :key="child.id" :data="child"/> </ul> </li> </div> </テンプレート> <スクリプト> './bus.js' からバスをインポートします。 エクスポートデフォルト{ //名前を宣言する name: "Reply", プロパティ: ['データ'], //コンポーネントを宣言します components: {}, //変数data()を宣言する{ 戻る { フィド: 0, } }, //カスタムフィルター フィルター: { myfilter: 関数 (値) { 値 = value.slice(0, 3); 戻り値 + "********"; } }, // 初期化メソッドmounted() { }, //メソッドを宣言する methods: { //カテゴリーIDをクリック getfid: 関数 (fid) { _fid_ は、_fid_ の後に続くすべての要素で構成されます。 //コンソールログ(this.fid); バス.$emit("msg", fid); localStorage.setItem("fid", this.fid); //すべてのハイライトをキャンセルします var divs = document.getElementsByClassName("bg"); //セレクターをトラバースする for (var i = divs.length - 1; i >= 0; i--) { //ハイライトを解除 divs[i].classList.remove("bg"); } //まず、現在の要素を強調表示します var mydiv = document.getElementById(fid); // ハイライト クラス セレクターを動的に追加します。mydiv.classList.add("bg"); } } } </スクリプト> <スタイル> ul { 左パディング: 10rem; リストスタイル: なし; } .bg { 背景: オレンジ; 色: 白; } </スタイル> サードパーティのコンポーネントを使用してカテゴリIDを監視する <!--bus.js--> 'vue' から Vue をインポートします デフォルトの新しい Vue() をエクスポートします。 コースページの追加 <テンプレート> <div> <heads></heads> <h1>コース提出ページ</h1> <返信:data="mydata"/> <バンセルグループ> <van-field label="コースタイトル" v-model="title"/> <van-field label="コースの説明" v-model="desc" rows="5" type="textarea"/> <van-field label="コース料金" v-model="price"/> <div v-for="(値、キー、インデックス) パラメータ内"> <van-field :label="キー" v-model="情報[キー]"/> </div> <van-button color="gray" @click="addcourse">コースを保存</van-button> </バンセルグループ> </div> </テンプレート> <スクリプト> //他のコンポーネントをインポートするimport bus from './bus.js'; 「./reply」から返信をインポートします。 「./heads」からヘッドをインポートします。 エクスポートデフォルト{ //コンポーネントを宣言: { 「返信」: 返信、 「ヘッド」:ヘッド、 }, //コンストラクタが作成されました() { //バスを監視します。$on('msg', target => { console.log(ターゲット); this.fid = ターゲット; (this.cid === 0)の場合{ this.get_cate(this.fid) } それ以外 { this.$toast.fail("コースはすでに保存されているため、カテゴリを再度選択することはできません"); false を返します。 } }); }, //変数data()を宣言する{ 戻る { //データ mydata: {}, //コースカテゴリID fid: localStorage.getItem("fid"), タイトル: ""、 価格: ""、 説明: "", cid: 0, 動画: [], ビデオrc: "", パラメータ: {}, 情報: {} } }, // 初期化メソッドmounted() { データを取り出します。 }, //メソッドを宣言する methods: { get_cate(fid) { this.axios.get('http://localhost:5000/getcate/', {params: {'fid': fid}}).then(result => { var myparams = result.data.params; if (myparams === '') { マイパラメータ = null } myparams = JSON.parse(myparams) this.params = myparams for (var キー in this.params) { this.$set(this.info, キー, '') } console.log(この情報) }) }, //コースを追加する addcourse: function () { var リスト = []; for (var key in this.info) { lists.push({'key': キー、'value': this.info[key]、'label': this.params[key]}) } var list_str = JSON.stringify(リスト) var data_post = { fid: this.fid、 タイトル: this.title, 説明: this.desc, 価格: this.price, id: localStorage.getItem("user_id"), } リストの長さが0より大きい場合 データ投稿 = { fid: this.fid、 タイトル: this.title, 説明: this.desc, 価格: this.price, id: localStorage.getItem("user_id"), パラメータ:list_str } } this.axios.post( 'http://localhost:5000/addcourse/', this.qs.stringify(data_post)).then((結果) => { 結果データコード === 200 の場合 this.$toast.success('コースが正常に追加されました'); this.cid = 結果データ.cid; } それ以外 { this.$toast.fail(結果データmsg); } }); }, //データを取得する get_data: function () { //リクエストを送信 this.axios.get( 'http://localhost:5000/catelist/').then((結果) => { console.log(結果); //ルートノードを宣言します var mytree = {'id': 0, name: ""}; mytree['children'] = 結果.data; mytree をコピーします。 コンソールにログ出力します。 }); } } } </スクリプト> <スタイルスコープ> ul { 左パディング: 10rem; リストスタイル: なし; } </スタイル> まとめ 簡単に言うと、コースを追加するときにカテゴリを選択すると、そのカテゴリに渡す必要があるパラメータがフォームの形式で動的に表示されるため、ユーザーはコースを追加して効率を向上させることができます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: MySQL 5.6 の「暗黙的な変換」によりインデックスが失敗し、データが不正確になる
VMware のインストールパッケージのインストールダウンロードアドレス: https://www....
バージョン1.4.2公式ドキュメントドッカーハブ起動する環境変数SEATA_CONFIG_NAMEを...
CN2ラインとは何ですか? CN2 は、China Telecom Next Carrier Ne...
この記事では、ショッピングサイトの虫眼鏡機能を実現するためのjsの具体的なコードを紹介します。具体的...
問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...
効果原理主にCSSグラデーションを使用して、切り取りを必要としない背景のくり抜きを実現します。クーポ...
<テンプレート> <div class="アプリコンテナ"&...
この記事では、例を使用して MySQL カーソルの概念と使用方法を説明します。ご参考までに、詳細は以...
目次1. コンストラクタとプロトタイプ1. コンストラクター2. コンストラクタ問題3. コンストラ...
目次Vuex は単一の状態ツリーを使用するため、すべてのアプリケーション状態が比較的大きなオブジェク...
問題の説明:エラーメッセージ:原因: com.mysql.jdbc.PacketTooBigExce...
Vueに触れたばかりのパートナーの多くは、開発環境ではVueプロジェクトは正常であるが、パッケージ化...
目次1. はじめに2. インストール3. 基本的な使い方3.1、-rパラメータ3.2、-aパラメータ...
今日、私はクラスメートが問題を解決するのを手伝いました - Tomcat の起動が非常に遅く、約 5...
コードは次のようになります。 <!DOCTYPE html> <html lang...