Sử dụng Vue.js với vue-cli
Theo xu hướng gần đây có nhiều hệ thống và nhóm sử dụng vue.js, hòa trong xu thế đó chúng tôi cũng chuyển giao một phần của hệ thống sang vue.js.
Dưới đây tôi xin trình bầy sử dụng Vue.js với vue-cli, hy vọng sẽ giúp gì được cho các bạn đang sử dụng Vue.js
I. Xây dựng môi trường
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G1611
$ node -v
v6.11.3
$ npm -v
3.10.10
Để dùng vue-cli thì phải cần cài sẵn node và npm
Về editor, nếu có IDE của Intelli tôi suggest bởi vì nó có plugin của vue.js. Tôi hiện tại đang dùng Pycharm
II. Tạo Project
Đầu tiên, cài đặt vue-cli
$ npm install -g vue-cli
$ vue --version
2.8.2
Tạo project vue init <template> <project-name>
Ở đây, sử dụng template webpack, tạo project tutorial_vuejs_micro_erp
- Chú ý: Tới ddaaay có một số vấn đề, tạm thời hãy trả lời toàn bộ là "yes"
$ vue init webpack tutorial_vuejs_micro_erp
? Project name tutorial_vuejs_micro_erp
? Project description A Vue.js project
? Author Shintaro Tanaka
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? No
? Setup unit tests with Karma + Mocha? No
? Setup e2e tests with Nightwatch? No
vue-cli · Generated "tutorial_vuejs_micro_erp".
To get started:
cd tutorial_vuejs_micro_erp
npm install
npm run dev
Documentation can be found at https://vuejs-templates.GitHub.io/webpack
III. Thực thi trên localhost
vue init đã được thực thi, vì vậy hãy thực hiện cậu lệnh sau để bắt đâu
$ cd tutorial_vuejs_micro_erp
$ npm install
$ npm run dev
Mở trình duyệt voiw địa chỉ localhost:8080 sẽ thấy hình ảnh như dưới đây
IV. Cấu trúc file
Sau khi tạo xong project bằng vue init
cấu trúc file sẽ như sau:
tutorial_vuejs_micro_erp$ tree
./index.html
./src
├── App.vue
├── assets
│ └── logo.png
├── components
│ └── Hello.vue
├── main.js
└── router
└── index.js
Mình sẽ nắm được toàn thể nếu xem từng file
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>tutorial_vuejs_micro_erp</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
- Chú ý: hãy nhớ kỹ
<div id="app"></div>
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
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})
Tại đây, tạo Vue install, kết nối App Component bởi yếu tố id = app của index.html. Tiếp theo là đọc module App, router bởi import.
src/App.vue
<template>
<div id="app">
<img src="./assets/logo.png">
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'app'
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
File này chưa logo của App
src/router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import Hello from '@/components/Hello'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'Hello',
component: Hello
}
]
})
Ở đây Hoge Component được giả định, khi truy cập vào /hoge thì routing sẽ trả về Hoge Component.
export default new Router({
routes: [
{
path: '/',
name: 'Hello',
component: Hello
},
{
path: '/hoge',
name: 'Hoge',
component: Hoge
}
]
})
src/components/Hello.vue
Khi truy cập vào router bởi router/index.js thì Hello Component xuât hiện.
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
<ul>
<li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
<br>
<li><a href="http://vuejs-templates.GitHub.io/webpack/" target="_blank">Docs for This Template</a></li>
</ul>
<h2>Ecosystem</h2>
<ul>
<li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
<li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
<li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
<li><a href="https://GitHub.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
</ul>
</div>
</template>
<script>
export default {
name: 'hello',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
Bởi vì dài nên chia làm 3 phần
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
<ul>
<li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
<br>
<li><a href="http://vuejs-templates.GitHub.io/webpack/" target="_blank">Docs for This Template</a></li>
</ul>
<h2>Ecosystem</h2>
<ul>
<li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
<li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
<li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
<li><a href="https://GitHub.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
</ul>
</div>
</template>
Nếu loại bỏ {{ msg }} và <template>
thì cũng giống như html thông thường thôi
<script>
export default {
name: 'hello',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
}
}
</script>
Thẻ <script>
cũng giống như js và cũng định nghĩa giống như {{msg}} phía trên.
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
IV. Vue Component
Vue có 3 thành phần sau:
<template>
cấu trúc html<script>
định nghĩa js và msg trong thân html<style>
định nghĩa css
Vue.component('my-component',{
// オプション
})
V. Các viết data option
Chúng ta có hai cách viết sau:
Cách viết đúng:
// OK
data: function () {
return {
msg: 'Welcome to Your Vue.js App'
}
}
Cách viết sai:
// NG
data: () => {
return {
msg: 'Welcome to Your Vue.js App'
}
}
VI. Tổng kết
Trên đây tôi đã trình bày về cấu trúc đơn giản nhất mà có thể sử dụng được Vue.js, đồng thời mô tả các thành phần cấu thành trong vue.js. Tiếp theo tôi sẽ trình bày về cách lập trình các tính năng thêm, sửa cơ bản sử dụng vue.js
VII. Tham khảo
https://jp.vuejs.org/index.html
https://github.com/vuejs/vue-cli/releases