この記事では、参考までに、Vuex の具体的なコードを共有して、簡単なショッピングカートを実装します。具体的な内容は次のとおりです。 ファイル構造 アプリ.vue <テンプレート> <div id="アプリ"> <h3>ショッピングカートのデモ</h3> <時間> <h4>製品:</h4> <製品リスト /> <時間> <h4>マイカート</h4> <ショッピングカート /> </div> </テンプレート> <スクリプト> '@/components/ProductList' から ProductList をインポートします。 '@/components/ShoppingCart' から ShoppingCart をインポートします。 エクスポートデフォルト{ コンポーネント: 製品リスト、 ショッピングカート } } </スクリプト> 製品.vue <テンプレート> <div> <ul v-for="製品内のアイテム" :key="item.id"> <li> {{ item.title }} - {{ item.price }} 在庫: {{ item.inventory }><br> <button :disabled="!item.inventory" @click="addToCart(item)">カートに追加</button> </li> </ul> </div> </テンプレート> <スクリプト> 'vuex' から { mapGetters, mapActions } をインポートします。 エクスポートデフォルト{ 計算: { // ...mapGetters('products',{ // 製品: 'allProducts' // }) ...mapGetters({ 製品: 'products/allProducts' }) }, メソッド: { ...mapActions('cart',['addToCart']) }, 作成された() { this.$store.dispatch('products/getAllProducts'); } } </スクリプト> ショッピングカート <テンプレート> <div> <ul v-for="製品内のアイテム" :key="item.id"> <li>{{ item.title }} *{{ item.quantity }}</li> </ul> <div>合計: {{ total }}</div> </div> </テンプレート> <スクリプト> 'vuex' から { mapGetters } をインポートします。 エクスポートデフォルト{ 計算: { ...mapGetters('カート', { 製品: 'cartProducts', 合計: 'cartTotalPrice' }) } } </スクリプト> モジュール/製品.js '../../api' から api をインポートします。 定数状態 = { 全て: [] } const ゲッター = { allProducts: 状態 => state.all } 定数アクション = { // 初期製品データを取得する getAllProducts({ commit }) { api.getProducts(products => commit('setProducts', products)); } } const 変異 = { setProducts(状態、製品) { state.all = 製品; }, // この商品の在庫を減らす decreamentInventory(state, { id }) { productItem を state.all.find(item => item.id === id); とします。 製品アイテム.在庫 --; } } エクスポートデフォルト{ 名前空間: true、 州、 ゲッター、 行動、 突然変異 } モジュール/cart.js 定数状態 = { 追加されたリスト: [] } const ゲッター = { cartProducts(状態、ゲッター、ルート状態) { state.addedList.map((item, index) => { を返します。 productItem を rootState.products.all.find(product => product.id === item.id) とします。 戻る { タイトル: productItem.title, 価格: productItem.price、 数量: アイテム.数量 } }) }, cartTotalPrice(状態、ゲッター) { getters.cartProducts.reduce((total, product) => { を返します。 合計 + (product.price * product.quantity) を返します。 }, 0); } } 定数アクション = { addToCart({ 状態, コミット }, 製品) { (製品在庫 > 0) の場合 { productItem を state.addedList.find(item => item.id === product.id); とします。 if (製品アイテム) { commit('incrementItemQuantity', productItem); } それ以外 { コミット('pushItemToCart', 製品); } commit('products/decreamentInventory', product, { root: true }); } } } const 変異 = { // ショッピングカート内の同一アイテムの数を増やす increaseItemQuantity(state, { id }) { productItem を state.addedList.find(item => item.id === id) とします。 製品アイテム.数量++; }, // 商品をショッピングカートに追加する pushItemToCart(state, { id }) { 状態.追加されたリスト.push({ id、 数量: 1 }) }, } エクスポートデフォルト{ 名前空間: true、 州、 ゲッター、 行動、 突然変異 } ストア/index.js 'vue' から Vue をインポートします。 'vuex' から Vuex をインポートします。 './modules/cart' からカートをインポートします。 './modules/products' から製品をインポートします。 Vue.js で Vuex をビルドします。 デフォルトの新しいVuex.Storeをエクスポートします({ モジュール: カート、 製品 } }); メイン.js 「vue」からVueをインポートします。 「@/components/App.vue」から App をインポートします。 「@/store」からストアをインポートします。 Vue.config で productionTip を false に設定します。 新しいVue({ 店、 レンダリング: h => h(App) }).$mount("#app"); 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Vue でシンプルな無限ループスクロールアニメーションを実装する例
>>: JSはオンラインでのアナウンスのスクロール効果を実現します
HTML の再利用は、あまり話題に上らない言葉です。今日は、この問題を次のようにまとめたいと思います...
序文最近、小さなデモを作成しました。大規模な工場のオンライン データを使用したため、インターフェイス...
1. 問題の説明Docker コンテナにインストールされているストレージが終了状態になっているため、...
さまざまな理由で、誰もが MySQL を再インストールする必要があると思います。 MySQL と Q...
債券とは何かNIC ボンドは、実稼働シナリオでよく使用されるテクノロジーです。複数の NIC を 1...
この記事では、Ubuntu 18.04でのVMware Toolsのインストールと設定について記録し...
目次差分アルゴリズムレイヤーごとの比較同じタイプのコンポーネントを比較する同じタイプの要素の比較子ノ...
目次Vueのレスポンシブシステムの基本原則1. Object.definePropertyの使い方を...
この記事では、チャット機能を実現するためのVue+express+Socketの具体的なコードを参考...
この記事では、星空アニメーションを実現するための高度な CSS3 LESS のサンプルコードを次のよ...
MySql は、私たちが頻繁に使用するデータ ソースです。開発者が練習、小規模なプライベート ゲーム...
序文:グループ化関数はグループ内の最初のデータを取得しますが、各グループ内の最新のデータを取得する必...
この記事の例では、ショッピングカートの加算と減算、価格計算を実装するためのjsの具体的なコードを共有...
序文ヒント: ここで、この記事に記録するおおよその内容を追加できます。例えば、人工知能の継続的な発展...
usemap は <img> タグの属性であり、使用するイメージ マップの名前を指定する...