第一次用vue,怕自己忘了...
准备工作
-
在github上新建一个仓库vue-resumer-1;
-
clone到本地;
-
在本地打开终端,
cd
到当前目录; -
输入
npm config set registry https://registry.npm.taobao.org/
,设定npm下载途径; -
输入
npm init -y
创建一个package.json(可自行修改); -
输入
npm install -g vue-cli
下载安装vue-cli命令行工具; -
输入
vue init <template-name> <project-name>
,这里就输入vue init webpack .
即可; -
一路选择Y;
-
提示你选择Runtime + Compiler或者Runtime-only,前者适合浏览器环境(Compiler就是把HTML变成JS再把JS反馈到页面中),后者适合nodejs环境,这里选择前者;
-
提示
Install vue-router?
,选择n,因为手动安装更容易理解; -
提示
Use ESLint to lint your code?
,选择n,因为ESLint有许多奇奇怪怪的规则,第二次使用时就可以Use了; -
提示
Setup unit tests with Karma + Mocha?
,选择n,很多公司是不写单元测试的,所以也不选; -
提示
Setup e2e tests with Nightwatch?
,选择n。 -
提示
vue-cli Generated "vue-resumer-1".
,告诉你已经生成; -
输入
npm install
; -
push到github上,添加描述
git commit -am "vue init webpack . && npm install"
;
初识Vue
-
输入
npm run dev
,创建了本地服务器,可以访问页面; -
打开VScode,进入本地仓库vue-resumer-1,查看目录结构;
-
找到并打开index.html,发现HTML结构怪异:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>vue-resumer-1</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
复制代码
- 检查http://localhost:8080 页面,发现浏览器里实时文档结构是这样的:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>vue-resumer-1</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<script type="text/javascript" src="/app.js"></script>
</body>
</html>
复制代码
-
对比发现,vue自动在HTML的
<body/>
前注入(inject)了一个JS脚本,其src="/app.js"
; -
进入
./src/
,发现只有assets、components、App.vue和main.js四个文件(夹); -
打开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'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',//容器
components: { App },//ES6写法
template: '<App/>'//HTML文档
})
复制代码
-
基本认识:index.html是HTML的入口文件,main.js是JS的入口文件,后者会自动注入到前者。
-
打开App.vue(这是已经修改过的文件):
<template>
<div id="app">
<Topbar class="topbar"/>
<main>
<Editor class="editor"/>
<Preview class="preview"/>
</main>
</div>
</template>
<script>
import Topbar from './components/Topbar'//不写后缀也无所谓,因为它会自行查找
import Editor from './components/Editor'
import Preview from './components/Preview'
export default {
components: {
Topbar,
Editor,
Preview
}
}
</script>
<style lang="scss">
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
height: 100vh;
display: flex;
flex-direction: column;
}
.topbar {
background-color: red;
}
main {
background-color: blue;
display: flex;
flex: 1;
> .editor {
width: 20em;
}
> .preview {
flex: 1;
}
}
</style>
复制代码
-
可以发现
.vue
后缀的文件结构,就是<template><template/>
、<script><script/>
、<style><style/>
三个根标签组成的。 -
<template><template/>
里面是关于文档的总体结构,这里的语法实际上是XML;<script><script/>
里面是配置要引入的组件;<style><style/>
里面是设置样式; -
.vue
结尾的文件,叫做“单文件组件”,除了App.vue之外,都放在了components文件夹里面; -
可以自己写一个单文件组件,如Topbar.vue,放在components文件夹里,然后通过App.vue里的
<script>
import Topbar from './components/Topbar'
export default{
components: {
"Topbar": Topbar
}
}
<script/>
复制代码
来引用,把<Topbar/>
放在<template><template/>
中你想要放置的位置,再通过<style><style/>
来统筹App.vue的总体样式。
-
以上是第一种引用标签的方式,即
import
它,还有一种方式:
全局注册标签(少用) -
我们可以在main.js文件
new Vue
之前,注册一个标签:
import Vue from 'vue'
import App from './App'
Vue.config.productionTip = false
Vue.component('Jack', {
template: '<p>I am {{name}}</p>',
data(){ //data必须是一个function
return{
name:'Jack Ma'
}
}
})
new Vue({
el: '#app',
components: { "App": App },//ES6语法,如果key和value是相同的,可以写成components: { App }
template: '<App/>'
})
复制代码
-
这样,就可以直接在App.vue的
<template><template/>
里面添加<Jack/>
了,就相当于是添加了子标签<p>I am {{name}}</p>
; -
另外,还可以把components里的单文件组件在main.js里给注册成全局标签:
import Hello from './components/HelloWorld'
Vue.component('Hello',Hello)
复制代码
这样,HelloWorld.vue就可以不用在App.vue里import
就直接放入<template><template/>
里用了;
- 总结一下:
- index.html是HTML的入口文件,main.js是JS的入口文件,后者会自动注入到前者;
- main.js主要负责
import
全局变量和new Vue
; - App.vue负责
import
各component,整合APP的整体template和设置style; - 各component放入components文件里,每一个都是一个单文件组件,可以被App.vue和main.js
import
。
实现基本布局
-
总体思路:
布局无非就是topbar、editor、preview三个部分,可以做成三个单文件组件,放进components文件夹里,再在App.vue里import
并设置style; -
终端输入
npm i -S normalize.css
引入normalize.css,在main.js里import normalize.css
; -
在assets文件夹里新建一个reset.scss文件,重置CSS,在main.js里
import './assets/reset.scss'
,App.vue的style部分可以设置成<style lang="scss"><style/>
; -
但要确保有sass-loader和node-sass,如果没有,会报错,可以在终端输入
npm i -g sass-loader
和npm i -D node-sass
;