cmd vào thư mục gốc project-netashop.npm install vuex
project-nentang/src/store/project-nentang/src/store/store.jsimport Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
// State là Trạng thái => hay còn gọi là Data (dữ liệu) của KHO chứa (store)
// Tất cả dữ liệu sẽ được khởi tạo trong thuộc tính `state`
state: {
products: [
{
id: 1,
name: 'Notebook Lenovo Ideapad 320 Intel® Core i5-7200u 8GB',
price: 2259,
image: require('@/assets/img/product/ipad4.png'),
stars: 5,
totalReviews: 230,
details: 'Mô tả chi tiết về sản phẩm Notebook Lenovo',
totalBuyed: 0
},
{
id: 2,
name: 'Notebook Dell Inspiron i15-3567-A30P Intel Core 7ª i5 4GB',
price: 2284,
image: require('@/assets/img/product/samsung-galaxy-tab.jpg'),
stars: 3.4,
totalReviews: 20,
details: 'Mô tả chi tiết về sản phẩm Notebook Dell Inspiron',
totalBuyed: 0
},
{
id: 3,
name: 'Notebook Samsung Essentials E21 Intel Celeron Dual Core',
price: 1490,
image: require('@/assets/img/product/iphone5.jpg'),
stars: 1,
totalReviews: 1,
details: 'Mô tả chi tiết về sản phẩm Notebook Samsung Essentials',
totalBuyed: 0
},
{
id: 4,
name: 'Notebook Samsung Expert X22 Intel Core 7 i5 8GB',
price: 2307,
image: require('@/assets/img/product/nokia-asha-311.jpg'),
stars: 4.4,
totalReviews: 340,
details: 'Mô tả chi tiết về sản phẩm Notebook Samsung Expert',
totalBuyed: 0
}
],
cartProducts: [],
currentProduct: {}
},
// Getters: là các thuộc tính dùng để các component lấy dữ liệu từ KHO chứa (store) về
getters: {
getAllProducts: state => state.products,
getProductsInCart: state => state.cartProducts,
getCurrentProduct: state => state.currentProduct
},
// Mutations: là các thuộc tính dùng để thay đổi giá trị bên trong KHO chứa (store)
// thay đổi giá trị, nhưng chạy ĐỒNG BỘ (SYNC)
mutations: {
ADD_PRODUCT: (state, product) => {
let o = state.cartProducts.find(o => o.id === product.id) // Tìm sản phẩm trong Giỏ hàng theo ID
if (!o) { // Nếu sản phẩm chưa có trong Giỏ hàng => Thêm sản phẩm vào giỏ hàng
product.totalBuyed = 1
state.cartProducts.push(Object.assign({}, product))
} else { // Nếu sản phẩm đã có => cộng đồn số lượng mua lên 1 đơn vị
o.totalBuyed += 1
}
},
REMOVE_PRODUCT: (state, id) => {
let o = state.cartProducts.find(o => o.id === id) // Tìm sản phẩm trong Giỏ hàng theo ID
let index = state.cartProducts.indexOf(o)
state.cartProducts.splice(index, 1)
},
CURRENT_PRODUCT: (state, product) => {
state.currentProduct = product
}
},
// Actions: là các hàm (methods) dùng để thực hiện các hành động thay đổi giá trị bên trong KHO chứa (store)
// tương tự như Mutations, nhưng có thể chạy BẤT ĐỒNG BỘ (ASYNC)
actions: {
addProduct: (context, product) => {
context.commit('ADD_PRODUCT', product)
},
removeProduct: (context, id) => {
context.commit('REMOVE_PRODUCT', id)
},
currentProduct: (context, product) => {
context.commit('CURRENT_PRODUCT', product)
}
}
})
storeproject-nentang/src/main.js// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store/store.js'
Vue.config.productionTip = false
// Import thư viện Bootstrap (JS và CSS)
import 'bootstrap'
import 'bootstrap/dist/css/bootstrap.min.css'
// Import thư viện Font Awesome
import { library } from '@fortawesome/fontawesome-svg-core'
import { fab } from '@fortawesome/free-brands-svg-icons'
import { fas } from '@fortawesome/free-solid-svg-icons'
import { far } from '@fortawesome/free-regular-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
// Đăng ký component Global Layouts
import Default from './layouts/LayoutDefault.vue'
import NoSidebar from './layouts/LayoutNoSidebar.vue'
library.add(fab, fas, far)
Vue.component('font-awesome-icon', FontAwesomeIcon)
Vue.component('default-layout', Default)
Vue.component('no-sidebar-layout', NoSidebar)
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
components: { App },
template: '<App/>'
})
Cùng nhau học tập, khám phá các kiến thức nền tảng về Lập trình web, mobile, database nhé.
Nền tảng kiến thức - Hành trang tới tương lai hân hạnh phục vụ Quý khách!
Khám phá, trải nghiệm ngay
Vui lòng đăng nhập để gởi bình luận!
Đăng nhậpChưa có bình luận nào!