NavBar
: đây là thanh điều hướng (menu) nằm trên cùng của trang webSideBar
: đây là phần nằm bên trái của trang web, sẽ được thiết kế theo cột 3 (Bootstrap). Thường sẽ chứa các thông tin về Chuyên mục Sản phẩm, banner quảng cáo, ...Main
: đây là thành phần chính của trang web, chứa placeholder <router-view />
dùng để thay đổi nội dung khi người dùng điều hướng qua trang khác.FooterBar
: đây là chân trang web. Thường để chứa các thông tin Địa chỉ, Số điện thoại, Email, ... để khách hàng liên hệ.NavBar
project-netashop/src/components/NavBar.vue
<template> <nav class="navbar navbar-expand-lg navbar-dark bg-dark sticky-top"> <div class="container"> <router-link to="/" class="navbar-brand">NetaShop</router-link> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation" > <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mr-auto"> <li> <router-link to="/" class="nav-link" exact-active-class="text-success" active-class="active"> <font-awesome-icon :icon="['fas', 'home']" /> Trang chủ </router-link> </li> <li> <router-link to="/gioi-thieu" class="nav-link" exact-active-class="text-success" active-class="active"> <font-awesome-icon :icon="['fab', 'twitter']" /> Giới thiệu </router-link> </li> <li> <router-link to="/lien-he" class="nav-link" exact-active-class="text-success" active-class="active"> <font-awesome-icon :icon="['fab', 'twitter']" /> Liên hệ </router-link> </li> </ul> </div> </div> </nav> </template> <script> export default { } </script> <style></style>
SideBar
project-netashop/src/components/SideBar.vue
<template> <div class="sidebar"> <a href="#"> <img src="@/assets/img/logo-nentang.jpg" class="img-fluid img-thumbnail" /> </a> <h1>Neta Shop</h1> <ul class="list-group my-2"> <li class="list-group-item active"> <a href="#" class="text-white">Máy tính xách tay</a> </li> <li class="list-group-item"> <a href="#">Điện thoại</a> </li> <li class="list-group-item"> <a href="#">Phụ kiện, linh kiện máy tính</a> </li> </ul> <a href="#"> <img src="@/assets/img/banner/banner-1.png" class="img-fluid img-thumbnail my-2" /> </a> <a href="#"> <img src="@/assets/img/banner/banner-2.png" class="img-fluid img-thumbnail my-2" /> </a> </div> </template> <script> export default { } </script> <style></style>
FooterBar
project-netashop/src/components/FooterBar.vue
<template> <footer class="footer border-top"> <div class="container"> <div class="content has-text-centered"> <p> Made with ? by <a href="https://nentang.vn">NenTang.vn | Nền tảng tới Tương lai</a> </p> </div> </div> </footer> </template> <script> export default { } </script> <style></style>
DefaultLayout
project-netashop/src/layouts/
. Tất cả layout của trang web sẽ được nằm trong đây.project-netashop/src/layouts/DefaultLayout.vue
<template> <div class="LayoutDefault"> <nav-bar /> <div class="container mt-2"> <div class="row"> <div class="col-md-3"> <side-bar /> </div> <div class="col-md-9"> <main class="LayoutDefault__main"> <slot /> </main> </div> </div> </div> <footer-bar /> </div> </template> <script> // Import thành phần (components) NavBar, SideBar, FooterBar để sử dụng import NavBar from '@/components/NavBar' import SideBar from '@/components/SideBar' import FooterBar from '@/components/FooterBar' // Để sử dụng được các thẻ (tag) của các component tương ứng // <nav-bar /> -> component NavBar // <side-bar /> -> component SideBar // <footer-bar /> -> component FooterBar // Chúng ta phải khai báo trong thuộc tính `components` của phần export default {} export default { components: { NavBar, SideBar, FooterBar } } </script> <style scoped> </style>
Home.vue
project-netashop/src/pages/
. Tất cả các trang web sẽ được nằm trong đây.project-netashop/src/pages/Home.vue
<template> <div id="home-page"> Trang chủ </div> </template> <script> export default { } </script> <style> </style>
/
project-netashop/src/router/index.js
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) /* Chúng ta sử dụng thuộc tính `meta` trong routes để khai báo: - Ứng với path / -> sẽ sử dụng layout `default` - Ứng với path /gioi-thieu -> sẽ sử dụng layout `no-sidebar` - Ứng với path /lien-he -> sẽ sử dụng layout `no-sidebar` - Ứng với path /kiem-tra-gio-hang -> sẽ sử dụng layout `no-sidebar` - Ứng với path không tìm thấy 404 -> sẽ sử dụng layout `no-sidebar` */ const routes = [ { path: '/', name: 'home', meta: { layout: 'default' }, // component: require('@/pages/Home.vue').default component: () => import('@/pages/Home.vue') }, ] // Để đường dẫn Path đẹp hơn và thân thiện với người dùng và SEO // Chúng ta sử dụng History mode thay vì HashTag mode (dấu #) const router = new Router({ mode: 'history', routes: routes }) export default router
project-netashop/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' 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' library.add(fab, fas, far) Vue.component('font-awesome-icon', FontAwesomeIcon) Vue.component('default-layout', Default) /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' })
project-netashop/src/App.vue
<template> <div id="app" class="App"> <!-- Sử dụng <component> :is để kiểm tra và yêu cầu VueJS: - Tương ứng với Component nào thì sẽ hiển thị layout tương ứng --> <component :is="layout"> <router-view /> </component> </div> </template> <script> // Khai báo layout mặc định là default const defaultLayout = 'default' export default { computed: { layout () { // Sử dụng this.$route.meta.layout để kiểm tra xem trong route có khai báo meta tương ứng hay không? // Nếu không có khai báo layout -> sẽ hiển thị layout default return (this.$route.meta.layout || defaultLayout) + '-layout' } }, created () { // nothing defined here (when this.$route.path is other than "/") console.log(this.$route, this.$route.meta.layout) }, updated () { // something defined here whatever the this.$route.path console.log(this.$route, this.$route.meta.layout) } } </script> <style> </style>
NavBar
: đây là thanh điều hướng (menu) nằm trên cùng của trang webMain
: đây là thành phần chính của trang web, chứa placeholder <router-view />
dùng để thay đổi nội dung khi người dùng điều hướng qua trang khác.FooterBar
: đây là chân trang web. Thường để chứa các thông tin Địa chỉ, Số điện thoại, Email, ... để khách hàng liên hệ.NoSidebarLayout
project-netashop/src/layouts/
. Tất cả layout của trang web sẽ được nằm trong đây.project-netashop/src/layouts/NoSidebarLayout.vue
<template> <div class="LayoutNoSidebar"> <nav-bar /> <div class="container"> <main class="LayoutNoSidebar__main mt-2"> <slot /> </main> </div> <footer-bar /> </div> </template> <script> // Import thành phần (components) NavBar, FooterBar để sử dụng import NavBar from '@/components/NavBar' import FooterBar from '@/components/FooterBar' // Để sử dụng được các thẻ (tag) của các component tương ứng // <nav-bar /> -> component NavBar // <footer-bar /> -> component FooterBar // Chúng ta phải khai báo trong thuộc tính `components` của phần export default {} export default { components: { NavBar, FooterBar } } </script> <style></style>
About.vue
project-netashop/src/pages/
. Tất cả các trang web sẽ được nằm trong đây.project-netashop/src/pages/About.vue
<template> <section> <div class="container"> <h1>Giới thiệu NetaShop</h1> </div> </section> </template>
/gioi-thieu
project-netashop/src/router/index.js
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) /* Chúng ta sử dụng thuộc tính `meta` trong routes để khai báo: - Ứng với path / -> sẽ sử dụng layout `default` - Ứng với path /gioi-thieu -> sẽ sử dụng layout `no-sidebar` - Ứng với path /lien-he -> sẽ sử dụng layout `no-sidebar` - Ứng với path /kiem-tra-gio-hang -> sẽ sử dụng layout `no-sidebar` - Ứng với path không tìm thấy 404 -> sẽ sử dụng layout `no-sidebar` */ const routes = [ { path: '/', name: 'home', meta: { layout: 'default' }, // component: require('@/pages/Home.vue').default component: () => import('@/pages/Home.vue') }, { path: '/gioi-thieu', name: 'about', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/About.vue') } ] // Để đường dẫn Path đẹp hơn và thân thiện với người dùng và SEO // Chúng ta sử dụng History mode thay vì HashTag mode (dấu #) const router = new Router({ mode: 'history', routes: routes }) export default router
Contact.vue
project-netashop/src/pages/
. Tất cả các trang web sẽ được nằm trong đây.project-netashop/src/pages/Contact.vue
<template> <section> <div class="container"> <h1>Thông tin Liên hệ</h1> </div> </section> </template>
/lien-he
project-netashop/src/router/index.js
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) /* Chúng ta sử dụng thuộc tính `meta` trong routes để khai báo: - Ứng với path / -> sẽ sử dụng layout `default` - Ứng với path /gioi-thieu -> sẽ sử dụng layout `no-sidebar` - Ứng với path /lien-he -> sẽ sử dụng layout `no-sidebar` - Ứng với path /kiem-tra-gio-hang -> sẽ sử dụng layout `no-sidebar` - Ứng với path không tìm thấy 404 -> sẽ sử dụng layout `no-sidebar` */ const routes = [ { path: '/', name: 'home', meta: { layout: 'default' }, // component: require('@/pages/Home.vue').default component: () => import('@/pages/Home.vue') }, { path: '/gioi-thieu', name: 'about', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/About.vue') }, { path: '/lien-he', name: 'contact', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/Contact.vue') } ] // Để đường dẫn Path đẹp hơn và thân thiện với người dùng và SEO // Chúng ta sử dụng History mode thay vì HashTag mode (dấu #) const router = new Router({ mode: 'history', routes: routes }) export default router
404.vue
project-netashop/src/pages/
. Tất cả các trang web sẽ được nằm trong đây.project-netashop/src/pages/404.vue
<template> <div class="section"> <h1>Xin lỗi, Trang không tìm thấy (404) !!!</h1> </div> </template>
*
project-netashop/src/router/index.js
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) /* Chúng ta sử dụng thuộc tính `meta` trong routes để khai báo: - Ứng với path / -> sẽ sử dụng layout `default` - Ứng với path /gioi-thieu -> sẽ sử dụng layout `no-sidebar` - Ứng với path /lien-he -> sẽ sử dụng layout `no-sidebar` - Ứng với path /kiem-tra-gio-hang -> sẽ sử dụng layout `no-sidebar` - Ứng với path không tìm thấy 404 -> sẽ sử dụng layout `no-sidebar` */ const routes = [ { path: '/', name: 'home', meta: { layout: 'default' }, // component: require('@/pages/Home.vue').default component: () => import('@/pages/Home.vue') }, { path: '/gioi-thieu', name: 'about', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/About.vue') }, { path: '/lien-he', name: 'contact', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/Contact.vue') }, { path: '*', name: '404', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/404.vue') } ] // Để đường dẫn Path đẹp hơn và thân thiện với người dùng và SEO // Chúng ta sử dụng History mode thay vì HashTag mode (dấu #) const router = new Router({ mode: 'history', routes: routes }) export default router
project-netashop/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' 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, 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!