在js中,咱們能夠經過id, class 或者標籤獲取DOM元素,vue中也爲咱們提供了獲取原生DOM的方法,就是給標籤或者組件添加 ref 屬性,經過 this.$refs 獲取,以下 : css
<div id="app"></div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> // 建立一個全局組件Test Vue.component('Test', { data(){ return {} }, template:`<div>我是測試組件</div>` }); // 建立一個全局組件Test2 Vue.component('Test2', { data(){ return {} }, template:`<div>我是測試組件2</div>` }); // 聲明一個局部組件App let App = { data(){ return {} }, template:` <div class="app"> <input ref="input" type="text"> <Test ref="test"></Test> <Test2 ref="testB"></Test2> </div> `, // DOM加載完成後調用mounted mounted(){ // this.$refs.input 獲取input輸入框 this.$refs.input.focus(); // this.$refs.test 獲取Test組件實例對象 // this.$refs.test.$parent 獲取Test組件的父組件 // this.$refs.test.$root 獲取根實例對象Vue // this.$children 獲取當前組件的全部子組件,是一個列表 // this.$refs 獲取全部有ref屬性的DOM元素或者組件實例對象 // for循環遍歷 for(let key in this.$refs){ console.log(this.$refs[key]) } } }; // Vue實例對象 new Vue({ el: '#app', data() { return {} }, template:`<App></App>`, components:{ App // 掛載組件App } }) </script>
總結:html
1)<div ref="ha">哈哈哈</div> 給標籤添加ref屬性,this.$refs.ha 獲取原始DOM對象前端
2)<Home ref="abc"></Home> 給組件添加ref屬性,this.$refs.abc 獲取組件實例化對象vue
DIY腳手架是爲了輔助咱們更深刻理解vue-cli中的文件結構,開發過程無需本身寫腳手架,使用vue-cli便可。node
YEOMAN網址:http://yeoman.io/python
vue-cli中使用了es6的module模塊化編程,可是前端瀏覽器不支持模塊化中的語法(導入import和導出export default等),咱們須要藉助webpack工具讓它去支持,而webpack的使用須要依賴nodejs環境,全部後臺語言都是支持模塊的,nodejs是一種基於JavaScript的服務器語言。webpack
在diy腳手架以前,先了解一下webpack(前端中的工具,官網:https://www.webpackjs.com/),它是一個打包工具(前端中三大打包工具備grunt、gulp和webpack)。git
一、es6的module(下面示例中main.js依賴module.js模塊)es6
// module.js
var person = {
name: '張三',
fav:function(){
alert(1);
}
}
export default person;
var name;
name = 23;
export {name}
export var num2 = 34;
export function add(){
alert(2);
}
// main.js
import * as a from './module.js' // *與css中的符號衝突,所以能夠起一個別名a
總結:上面示例中,main.js文件用到了module.js中的變量,這時要用webpack將這兩個打包成一個bundle.js文件,在html文件中直接引用bundle.js便可,因此,咱們將main.js做爲入口文件,bundle.js做爲出口文件,使用命令webpack ./main.js ./bundle.js進行編譯,生成bundle.js,注意你想在哪一個目錄下生成bundle.js文件就要進入哪一個目錄下執行命令。且修改了代碼就要編譯,這種手動編譯的方式顯得很笨重,後面介紹的腳手架vue-cli會自動幫咱們作這些工做。web
2 . 模塊化深刻
// index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"></div> <script src="./bundle.js"></script> </body> </html>
// App.js - 這是一個App組件 let App = { template:` <div>我時App組件</div> ` }; export default App
// main.js - webpack入口文件,依賴vue.js和App.js import Vue from './vue.js' import App from './App.js' new Vue({ el:'#app', data(){ return {} }, template:`<App></App>`, components:{ App } });
總結:這種方式仍是要依賴webpack軟件,手動執行webpack ./main.js ./bundle.js命令,編譯生成bundle.js方可運行,仍是沒有帶來多少方便。執行命令後效果以下圖:
3、使用npm和DIY腳手架過程其實咱們可使用node的npm(node package manager,即包管理器,至關於python中的pip3),也就是在項目中使用npm下載webapck模塊,接下來咱們先來學習如何使用npm和一步步DIY腳手架。
// 以上例中目錄爲例,進入到當前項目目錄module_deep
// 執行下面命令後會在當前目錄下生成package.json文件
1
|
npm init
-
-
yes
/
/
-
-
yes表示直接在當前目錄生成package.json文件,不然會問一些參數
|
// 下載webpack包,-D(即devDependencies)表示開發環境下依賴webpack包
// 執行下面命令後會在package.json中的devDependencies字段中添加一條"webpack":"^3.12.0"
1
|
npm i webpack@
3.12
.
0
-
D
/
/
下載過cnpm的可使用npm i webpack@
3.12
.
0
-
D命令代替
|
// npm ...會執行package.json中的"script"字段中的命令,也就是說若package.js中script字段以下:
"script": { "dev" : "webpack ./main.js ./bundle.js" }
// 那麼執行npm run dev至關於執行webpack ./main.js ./bundle.js,結果同上,即生成bundle.js
// 若package.json中script字段中dev字段對應的是webpack,以下:
"script": { "dev" : "webpack" }
// 那麼,npm會自動去找當前目錄下的webpack.config.js文件
// 其中都是nodejs代碼,包括webpack的入口文件,輸出文件,webpack.config.js內容以下:
module.exports = { entry:{ 'main': './main.js' }, output:{ 'filename': './bundle.js' } }
// 因此,當按照上述步驟配置好了package.json和webpack.config.js這兩個文件時,一樣能夠執行
1
|
npm run dev
|
// 自動生成出口文件bundle.js,到此,咱們一直要手動執行命令,雖然命令愈來愈簡單,但結果同樣
// 在開發環境中,咱們但願它能夠監聽到當修改代碼後,自動編譯
// 在開發完成準備上線時,咱們須要進行打包編譯一次
// 這時咱們就不要再用webpack.config.js文件做爲配置文件了,因生產和開發環境需求不一樣
// 因此用如下兩個文件來替代webpack.config.js文件,在webpack.json中指定好便可
// webpack.dev.config.js做爲開發環境下的配置文件
// webpack.pro.config.js做爲生產環境下的配置文件
// webpack.json指定方式以下
"script": { "dev" : "webpack --config ./webpack.dev.config.js", // 開發環境 "build" : "webpack --config ./webpack.pro.config.js" // 生產環境 }
// 除了js文件,咱們還有css文件,這是要在入口文件main.js中增長導入css文件的語句,以下:
import './index.css'
// 這時直接編譯會報以下錯誤:
// 下載css文件和style標籤的解析器,css-loader解析css文件,style-loader解析style標籤// 由於對於webpack來講,css文件也是一個模塊,可是像這樣的文件,webpack須要loaders處理
1
|
npm i css
-
loader style
-
loader
-
D
|
// 在webpack.dev.config.js和webpack.pro.config.js中配置css文件的loader,以下:
module.exports = { entry:{ 'main': './main.js' }, output:{ 'filename': './bundle.js' }, watch:true, // 監聽代碼修改自動生成bundle.js,編譯hung住,只在開發環境 module:{ loaders:[ //loader加載器,對es6代碼的解析,一個叫babel-loader的 { test:/\.css$/, loader:'style-loader!css-loader' } ] } }
// 下載html-webpack-plugin插件,用於將index.html放入dist目錄下
1
|
npm i html
-
webpack
-
plugin
-
D
/
/
-
D 至關於
-
-
save
-
dev
|
// 注意:經過npm下載的包直接導入便可,以下:
const HtmlWebpackPlugin = require('html-webpack-pligin');
// 而且要在webpack.dep.config.js中配置,以下:
plugins:[ new HtmlWebpackPlugin({ template:'./index.html', // 參照物 }) ]
// 執行命令npm run dev後,自動生成文件dist,其中是index.html和bundle.js文件
// 而vue是模塊化開發,App.js爲App.vue文件
// 下載vue解析器,vue-loader解析vue文件,vue-template-compiler解析vue文件中template
1
|
npm install vue
-
loader@
14.1
.
1
vue
-
template
-
compiler@
2.5
.
17
-
D
|
// 接下來就能夠建立App.vue文件,文件內容可以下:
<template> <div>我是一個App</div> </template> <script> export default { name:'App', // 給當前組件起名 data(){ return {} }, methods:{ } } </script> <style> </style>
// 下載vue和vue-router
npm i vue vue-router -S // vue和 vue-router是項目依賴,-S表示保存項目依賴的包
// 引用直接寫下載包的名字便可,不用再寫路徑了,以下:
import Vue from 'vue'
// 下載webpack-dev-server,是webpack的升級版,在前端搭一個服務器,即nodejs
1
|
npm install webpack
-
dev
-
server
-
-
save
-
dev
|
// 配置package.json,以下
"script": { "dev" : "webpack-dev-server --open --hot --inline --config ./webpack.dev.config.js", // 開發環境下自動打開瀏覽器,自動刷新 "build": "webpack --config ./webpack.pro.config.js" }
// 渲染機制render
render:c=>c(App)
// 最後npm run dev便可運行項目,經過訪問它開的服務器能夠訪問頁面,至此,咱們已經一步步搭好了一個腳手架,在此基礎上開發便可,接下來學習的腳手架就幫咱們作好了這些工做,它生成的目錄結構跟咱們本身建立的相似。
使用腳手架建立一個項目,只要下載了vue-cli就有了vue的命令
1
|
vue
-
V
/
/
查看vue版本
|
目前可用的模板有webpack模板和webpack-simple模板,咱們主要用前者,後者簡單瞭解
一、使用webpack-simple模板建立項目
// init初始化命令是版本2的命令,拉取了cli2後,便可用版本2又可用版本3的
1
|
vue init webpack
-
simple
04
-
my
-
project
/
/
自動生成名爲
04
-
my
-
project的項目,目錄以下
|
04-my-project |--.babelrc |--.editorconfig |--.gitignore |--index.html |--package.json |--README.json |--webpack.config.js |--src |--App.vue |--main.js |--assets |--...
// 執行下面命令,下載package.json中的包,注意必定要進入當前項目,即cd 04-my-project
1
|
npm install
/
/
執行後項目文件下生成node_modules目錄
|
// 啓動項目
1
|
npm run dev
|
// 下載vue-router
1
|
npm i vue
-
router
-
S
/
/
-
S下載到當前項目中
|
// vue提供scoped屬性,使得style屬性只對當前組件有效,不寫就是全局有效
<style scoped></style>
二、使用webpack模板建立項目
// 建立項目
1
|
vue init webpack
05
-
webpack
-
project
/
/
建立項目名爲
05
-
webpack
-
project的項目
|
// 若使用單頁面應用,則vue-router選項輸yes,其餘都是no,電腦有npm就選擇npm下載
// 進入項目
1
|
cd
05
-
webpack
-
project
|
// 安裝依賴的包
1
|
npm install
|
// 啓動項目
1
|
npm run dev
|
// 最後生成目錄以下
05-webpack-project |--.babelrc |--.editorconfig |--.gitignore |--.postcssrc.js |--index.html |--package.json |--README.md |--build 文件夾 |--config 文件夾 |--node_modules 文件夾 |--src 文件夾 |--static 文件夾
注意:nodejs中有這樣一個機制,即若一個文件夾下只有index.js,則直接寫文件夾名字便可。
接下來就能夠寫項目了!
四、使用elementui(ElementUI依賴vue,引用了要Vue.use(ElementUI))
// 下載到項目中
1
|
npm i element
-
ui
-
S
|
詳細內容參見官網:http://element-cn.eleme.io/#/zh-CN
main.js中使用
import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI);
五、全局css
全局css樣式文件,能夠在static下建立global文件夾,建立index.css,再在main.js中引用便可。
main.js中引用方式以下:
import '../static/global/index.css'
六、query查詢(會在當前路徑下拼接查詢條件 '?userid=2',後期將等號後邊的動態起來)
<router-link :to="{name:'Course', query:{userid:2}}">免費課程</router-link>
一、下載webpack命令
1
|
npm i webpack@
3.12
.
0
-
g
/
/
-
g表示
global
|
若是出現下面的錯誤,則再執行npm cache clear --force,以下圖:
經過module.exports = 變量 拋出二、CMD須要在nodejs的環境下
經過require('./time.js') 引入
這是CMD規範,瞭解便可,而vue中使用的是es6的module規範。
二、pycharm安裝vue
1)file - > settings - >Plugins搜索vue,點擊Search in repositonies,以下圖:
2)點擊左側Vue.js,點擊右側綠色按鈕Install,以下圖:
3)安裝完成後重啓pycharm便可。