Vueはショッピングカート決済機能をシミュレートします

Vueはショッピングカート決済機能をシミュレートします

この記事では、ショッピングカート決済機能を実現するためのVueの具体的なコードを例として紹介します。具体的な内容は以下のとおりです。

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
    <script src="js/vue.js" type="text/javascript"></script>
    <script src="js/jquery-3.6.0.js" type="text/javascript"></script>
    <スタイル タイプ="text/css">
        * {
            パディング: 0;
            マージン: 0
        }
        
        {
            テキスト装飾: なし;
        }
        。容器 {
            幅: 500ピクセル;
            マージン: 10px 自動;
        }
        
        。タイトル {
            幅: 500ピクセル;
            高さ: 50px;
            テキスト配置: 中央;
            行の高さ: 50px;
            フォントサイズ: 20px;
            背景色: 淡いターコイズ;
        }
        
        。アイテム {
            位置: 相対的;
            高さ: 50px;
            border-bottom: 1px 実線 paleturquoise;
        }
        
        .item画像{
            フロート: 左;
            幅: 100ピクセル;
            高さ: 50px;
        }
        
        .アイテム .価格 {
            位置: 絶対;
            フロート: 左;
            幅: 120ピクセル;
            左マージン: 10px;
            上: 15px;
            左: 100px;
        }
        
        .item .change {
            位置: 絶対;
            左: 220px;
            上: 15px;
            フロート: 左;
            幅: 200ピクセル;
        }
        
        .change {
            フロート: 左;
            表示: ブロック;
            幅: 20px;
            高さ: 20px;
            フォントサイズ: 18px;
            テキスト配置: 中央;
            行の高さ: 20px;
            背景色: #ccc;
        }
        
        .change入力{
            フロート: 左;
            幅: 50px;
            マージン: 0 5px;
        }
        
        .item .del {
            位置: 絶対;
            上: 8px;
            左: 420px;
            色: 赤;
            フォントサイズ: 24px;
        }
        
        .item .del:hover {
            上: 0;
            高さ: 50px;
            背景色: 青;
        }
        
        。合計 {
            位置: 相対的;
            幅: 500ピクセル;
            高さ: 50px;
            背景色: コーンフラワーブルー;
        }
        
        .合計スパン{
            位置: 絶対;
            上: 14px;
            左: 250px;
        }
        
        .合計スパンem{
            色: 赤;
            フォントスタイル: 通常;
            フォントサイズ: 20px;
        }
        
        .totalボタン{
            位置: 絶対;
            上: 8px;
            左: 400px;
            幅: 50px;
            高さ: 35px;
            境界線の半径: 25%;
            境界線: なし;
            アウトライン: なし;
            背景色: トマト;
        }
    </スタイル>
 
</head>
<本文>
    <div id="アプリ">
 
  <div>
    <div class="コンテナ">
        <マイカート></マイカート>
    </div>
  </div>
  
    </div>
    <script type="text/javascript">
   // 3 つのサブコンポーネント var CartTitle = {
            プロパティ: ['uname'],
            テンプレート: `<div class="title">{{uname}} の製品</div>`
        }
        var カートリスト = {
            プロパティ: ['リスト'],
            テンプレート: ` <div class="list">
                    <div class="item" :key="item.id" v-for="リスト内のアイテム">
                        <img :src="item.img" alt="">
                        <div class="price">{{item.price}}円/個</div>
                        <div class="change">
                            <a href="" @click.prevent=" sub(item.id)">-</a>
                            <input type="text" class="num" :value="item.num" @blur="changenum(item.id,$event)">
                            <a href="" @click.prevent=" add(item.id)">+</a>
                        </div>
                        <div class="del" @click="del(item.id)">×</div>
                    </div>
                </div>
                    `、
            メソッド: {
                // 削除するIDを親コンポーネントに渡す
                del: 関数(id) {
                    // コンソールログ(id);
                    this.$emit("del-cart", id);
                },
                // フォーム入力の数を変更する changenum: function(id, event) {
                    //console.log(id、イベントターゲット値);
                    // 親コンポーネントに渡して数量を変更します this.$emit('change-num', {
                        id: id、
                        数値: イベントターゲット値
                    })
                },
                // マイナスボタンをクリックする sub: function(id) {
                    this.$emit('sub-num', id);
                },
                //プラスボタンをクリックする add: function(id) {
                    this.$emit('add-num', id);
                }
            }
        }
        var カート合計 = {
                プロパティ: ['リスト'],
                テンプレート: `<div class="total">
                    <span>合計金額: <em>{{total}}</em>¥</span>
                    <button>チェックアウト</button>
                </div>`,
                計算: {
                    合計: 関数() {
                        var 合計 = 0;
                        this.list.forEach(item => {
                            合計 += アイテムの価格 * アイテムの番号;
                        });
                        合計を返します。
                    }
                }
            }
            // 親コンポーネントを定義する Vue.component('my-cart', {
            データ: 関数() {
                戻る {
                    uname: '私',
                    リスト: [{
                        id: 1,
                        名前:「アンタシューズ」
                        価格: 260,
                        番号: 1,
                        画像: 'img/a.jpg'
                    }, {
                        id: 2,
                        名前:「ハイアール給湯器」
                        価格: 2000,
                        番号: 1,
                        画像: 'img/hai.jpg'
                    }, {
                        id: 3,
                        名前: 'iphone',
                        価格: 7000、
                        番号: 1,
                        画像: 'img/iphone.jpg'
                    }, {
                        id: 4,
                        名称:「Huawei携帯電話」
                        価格: 4500、
                        番号: 1,
                        画像: 'img/h.jpg'
                    }]
                }
            },
            テンプレート: `<div class="mycart">
                <カートタイトル:uname="uname"></カートタイトル>
                <cart-list :list="リスト" @del-cart="delcart($event)" @change-num="changeNum($event)" @sub-num="subnum($event)" @add-num="addnum($event)"></cart-list>
                <cart-total :list="リスト"></cart-total>
                </div>`,
            コンポーネント:
                'カートタイトル': カートタイトル、
                'カートリスト': カートリスト、
                'カート合計': カート合計、
            },
            メソッド: {
                delcart: 関数(id) {
                    // ID に応じてリスト内の対応するデータを削除します // 1. ID に対応するデータのインデックスを検索します var index = this.list.findIndex(item => {
                        item.id == id を返します。
                    });
                    // 2. インデックスに従って対応するデータを削除します。this.list.splice(index, 1);
                },
                // リスト内の番号 num を id に応じて変更します
                changeNum: 関数(val) {
                    //コンソールログ(val);
                    this.list.some(item => {
                        (item.id == val.id)の場合{
                            アイテム番号 = 値番号;
                        }
                    })
                },
                // 数値を減らすためのマイナス記号
                サブナンバー: 関数(イベント) {
                    // console.log(event); event はクリックされた ID 番号です this.list.some(item => {
                        (item.id == イベント && item.num > 0)の場合{
                            アイテム.num--;
                        }
                    })
                },
                // プラス記号は数値を増加させます
                addnum: 関数(イベント) {
                    this.list.some(item => {
                        if (item.id == イベント) {
                            アイテム.num++;
                        }
                    })
                }
            }
        });
        var vm = 新しい Vue({
            el: "#app",
            データ: {
 
            }
        });
 
    
    </スクリプト>
    
</本文>
</html>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueがショッピングカート決済機能を実装
  • Vue はショッピングカートの合計価格計算を実現します

<<:  mysql トリガーの作成と使用例

>>:  MySQLの日付加算と減算関数の詳細な説明

推薦する

GIFアニメーション効果を模倣した自動ビデオ再生を実現するWeChatアプレットの例

需要背景:ミニプログラムページに GIF ダイナミック画像を挿入しますが、GIF 画像は通常サイズが...

HTML/XHTML における img 画像タグの基本的な使用法の詳細な説明

画像タグは、Web ページに画像を表示するために使用されます。 HTML/XHTML 画像 <...

HTML チュートリアル: 定義リスト

<br />原文: http://andymao.com/andy/post/104.h...

EXPLAIN を使って MySQL の SQL 実行プランを分析する方法

序文MySQL では、EXPLAIN コマンドを使用して、テーブルの接続方法や SELECT ステー...

TomcatはNginxリバースプロキシのクライアントドメイン名を取得します

質問Nginx リバース プロキシの後、Tomcat アプリケーションは、クライアント ブラウザーの...

数字当てゲームを実装するための純粋なJavaScript

100 以内の自然数をランダムに選択し、プレイヤーに 10 ラウンド以内にその数を推測させる数字推...

MySql マスタースレーブレプリケーションメカニズムの包括的な分析

目次マスタースレーブレプリケーションメカニズム非同期レプリケーション準同期レプリケーションマスタース...

jsはクリックしてカードを切り替える機能を実現します

この記事の例では、クリックしてカードを切り替える機能を実現するためのjsの具体的なコードを共有してい...

意外と知らないLinuxのSSHコマンドの使い方7選を徹底解説

システム管理者は複数のサーバーを同時に管理する場合があり、これらのサーバーは異なる場所に配置されてい...

Vue3 における ref と reactive の詳細な説明と拡張

目次1. 参照と反応1. 反応的2.参照2. shallowRef と shallowReactiv...

Ubuntu 18.04 で apt-get ソースを変更する方法

apt-get を使用してインストールすると、非常に遅くなります。国内のソースを変更すると、この問題...

mysql5.7.18のインストールと初期パスワードの変更方法

CentosでのMySQLのインストールについては、以前の記事を参照してください。 Centos7....

Docker で MySQL クラスターを構築する方法の例

Docker の基本的な手順:アップデートパッケージ yum -y アップデートDocker仮想マシ...

JDBC を使用して MySQL を操作するための簡単な分析では、Class.forName("com.mysql.jdbc.Driver") を追加する必要があります。

導入データベースに接続するためにJDBCを使用することに慣れている場合は、データベースに接続するため...

CSS は Google マテリアル デザインのテキスト入力ボックス スタイルを実装します (推奨)

みなさんこんにちは。今日は、純粋な CSS を使用して Google マテリアル デザインのテキスト...