亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解vue+vueRouter+webpack的簡單實例

2019-11-19 16:19:00
字體:
來源:轉載
供稿:網友

最近vue更新的2.0版本,唉,我是在2.0版本前學習的,現在更新了又要看一遍了,關鍵是我之前看了3個星期2.0就更新了,vux還沒同步更新,導致我用vux時要將vue的版本降回1.x,vue-router也要降回1.0才能使用~~~所以今天就寫一個單頁的下方tabbar的實例來記錄一下吧,也希望各位在用vue全家桶時少點坑吧,當然不是用vux= =…只是仿造而已

這里的demo我會使用vue2.0的simple-template作為腳手架,vue-router版本也是2.0的,如果想使用vux作為組件庫的話,大家就降版本吧~哦對了,如果大家正式寫項目的話,記得要用vuex,不是開玩笑,我之前寫了個簡單的單頁應用就沒用vuex也沒用組件庫都是手寫,然后組件之間的通信各種煩,你能想象一直向上廣播事件$boardCast之后,再一直向下分發 $emit的無語嗎……到最后自己都亂了,所以不是自己寫demo而是開始項目的話還是推薦使用vuex了,用過react的同學的話就知道了,vuex跟redux是一樣的~只是一個用于vue,一個用于react而已.

好了,開始構建吧~

Prerequisites: Node.js (>=4.x, 6.x preferred) and Git.

前提當然是裝了node且版本已經升級為6.x,在尤大大的vue-cli的使用教程中有說明的,對這里我們是采用自動化構建的方式創建配置模板

首先從零開始,打開打算創建的項目根目錄,再打開git的命令行吧~

1、全局安裝vue-cli腳手架

npm install -g vue-cli 

2、初始化webpack+vue的腳手架模板,這里我是用的簡化版模板,不帶單元測試的~因為多出來的很多我看不懂……….簡化版的我大概能看懂,也是我菜的原因= =…

vue init webpack-simple <project-name> 這里我定個名字就叫test吧

vue init webpack-simple test

3、按照步驟來就好

cd test 

npm install 這里會安裝babel、vue的加載器等各類依賴,這里要等一會,有點慢

npm run dev 這里跑一下本地文件,看看是否搭建完成,如果出現vue的頁面就完畢了

4、安裝vue-router與需要的組件庫,這里我裝一個餓了么的組件庫ElementUI吧,地址http://element.eleme.io/,因為已經兼容了vue2.0的版本,所以暫時拿來用用吧~官方文檔齊全,需要什么自己去看吧,我這里就簡單用一點

npm install vue-router npm i element-ui -D 

5、記得安裝css的加載器,如果你是用less或者sass的話,自己對應裝了添加到加載器就好
npm install style-loader css-loader 如果沒錯的話,你的加載器現在應該是這樣的,最后在package.json里面依賴文件要加上element-ui

//package.json"dependencies": { "element-ui": "^1.0.4", "vue": "^2.1.0" }//webpack.config.jsmodule: { rules: [  {  test: //.vue$/,  loader: 'vue-loader',  options: {   // vue-loader options go here  }  },  {  test: //.js$/,  loader: 'babel-loader',  exclude: /node_modules/  },  {  test: //.css$/,  loader: 'style-loader!css-loader'  },  {//添上這條規則,這是elementUI要用到的  test: //.(eot|svg|ttf|woff|woff2)(/?/S*)?$/,  loader: 'file-loader'  },  {  test: //.(png|jpg|gif|svg)$/,  loader: 'file-loader',  options: {   name: '[name].[ext]?[hash]'  }  } ] }

6、分模塊,寫組件
下面先展示我的文件目錄

testdist build.jsnode_modules …src App.vuediscovery.vueindex.vueinfo.vuemain.jssetting.vue.babelrc.gitignoreindex.htmlpackage.jsonREADME.mdwebpack.config.js
//App.vue(這里仿制vux的下方tabbar寫了一個組件,所以有點多,代碼有點爛,請原諒)<template> <div id="app"> <router-view></router-view> <div class="tabbar" @click="select">  <router-link :class="{'selected':indexPage === 'index'}" to="/index">  <img src="https://o84lhz5xo.qnssl.com/master/src/assets/demo/icon_nav_button.png" alt="">  <label>主頁</label>  </router-link>  <router-link :class="{'selected':indexPage === 'info'}" to="/info">  <img src="https://o84lhz5xo.qnssl.com/master/src/assets/demo/icon_nav_msg.png" alt="">  <label>信息</label>  </router-link>  <router-link :class="{'selected':indexPage === 'discovery'}" to="/discovery">  <img src="https://o84lhz5xo.qnssl.com/master/src/assets/demo/icon_nav_article.png" alt="">  <label>發現</label>  </router-link>  <router-link :class="{'selected':indexPage === 'setting'}" to="/setting">  <img src="https://o84lhz5xo.qnssl.com/master/src/assets/demo/icon_nav_cell.png" alt="">  <label>設置</label>  </router-link> </div> </div></template><script> export default { name: 'app', data () {  return {  radio:'1',  indexPage:'index'  } }, methods:{  select(event){  function findA(target){   if(target.nodeName != 'A'){   return findA(target.parentNode)   }   return target;  }  var modules = findA(event.target).lastElementChild.innerHTML;  if(modules == '主頁'){   this.indexPage='index';  }  else if(modules == '信息'){   this.indexPage='info';  }  else if(modules == '發現'){   this.indexPage='discovery';  }  else if(modules == '設置'){   this.indexPage='setting';  }  } } }</script><style> html,body{ margin:0; padding:0; } #app { font-family: 'microsoft yahei', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .tabbar{ position: fixed; bottom:0; display: flex; width:100%; height:55px; flex-direction:row; background: rgba(247,247,250,.9); font-size:12px; } .tabbar:before{ content: " "; position: absolute; left: 0; top: 0; width: 100%; height: 1px; border-top: 1px solid #979797; color: #979797; -webkit-transform-origin: 0 0; transform-origin: 0 0; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: white; } .tabbar a{ flex:1; color: #888; } .tabbar a img{ display: block; width:24px; height:24px; margin:3px auto; padding-top:5px; } .selected{ color: #09bb07 !important; } h1, h2 { font-weight: normal; } ul { list-style-type: none; padding: 0; } li { display: inline-block; margin: 0 10px; } a { text-decoration: none; }</style>
//index.vue(主頁模塊,套了一點elementUI,有點東西好看點= =..)<template> <div>  <h3>我是主頁模塊</h3>  <el-menu theme="dark" default-active="1" class="el-menu-demo" mode="horizontal" @select="handleSelect">   <el-menu-item index="1">處理中心</el-menu-item>   <el-submenu index="2">    <template slot="title">我的工作臺</template>    <el-menu-item index="2-1">選項1</el-menu-item>    <el-menu-item index="2-2">選項2</el-menu-item>    <el-menu-item index="2-3">選項3</el-menu-item>   </el-submenu>   <el-menu-item index="3">訂單管理</el-menu-item>  </el-menu> </div></template><script> export default {  methods:{   handleSelect:function(key,keyPath){    console.log(key,keyPath);   }  } }</script>
//info.vue(主頁模塊,套了一點elementUI,有點東西好看點= =..)<template> <h3>{{msg}}</h3> <div>  <el-alert    title="成功提示的文案"    type="success">  </el-alert>  <el-alert    title="消息提示的文案"    type="info">  </el-alert>  <el-alert    title="警告提示的文案"    type="warning">  </el-alert>  <el-alert    title="錯誤提示的文案"    type="error">  </el-alert> </div></template><script> export default {  data(){   return {    msg:'我是信息模塊'   }  } }</script>
//discovery.vue(發現模塊)<template> <div>  <h2>{{msg}}</h2>  <el-steps :space="100" :active="active" finish-status="success">   <el-step title="步驟 1"></el-step>   <el-step title="步驟 2"></el-step>   <el-step title="步驟 3"></el-step>  </el-steps>  <el-button style="margin-top: 12px;" @click="next">下一步</el-button> </div></template><script> export default {  data(){   return {    active:0,    msg:'我是發現模塊'   }  },  methods:{   next:function(){    if(this.active++ > 2) this.active = 0   }  } }</script>
//setting.vue(設置模塊)<template> <div class="block">  <h3>{{msg}}</h3>  <el-rate    v-model="value2"    :colors="['#99A9BF', '#F7BA2A', '#FF9900']"    :allow-half="true">  </el-rate>  <span>{{value2}}</span> </div></template><script> export default {  data() {   return {    value2: null,    msg:'我是設置模塊'   }  } }</script>
//main.js(主文件,聲明全局router)import Vue from 'vue'import Router from 'vue-router'import ElementUI from 'element-ui'import 'element-ui/lib/theme-default/index.css'import App from './App.vue'import index from './index.vue'import info from './info.vue'import discovery from './discovery.vue'import setting from './setting.vue'Vue.use(Router);Vue.use(ElementUI);const router = new Router({ routes:[ {  path:'/',  component:index }, {  path:'/index',  component:index }, {  path:'/info',  component:info }, {  path:'/discovery',  component:discovery }, {  path:'/setting',  component:setting } ]});new Vue({  el: '#app',  render: h => h(App), router:router});

最后就是webpack的入口文件必然是要改成main.js的,出口文件的文件夾為dist,名字就你自己定了,在index.html里加上就好~具體可以在我的另一篇筆記”初識webpack “中有寫過

最后npm run dev 查看效果就ok~如果想改綁定的端口號或者主機號,則在package.json中對應改就好

example:

"scripts": { "dev": "cross-env NODE_ENV=development webpack-dev-server --port 8181 --open --inline --hot", "build": "cross-env NODE_ENV=production webpack --progress --hide-modules" }

其中端口號是dev中的 --port <port>,主機號則為--host <hostname/ip>就比如我這里則綁定的為8181端口。

最后給大家展示一下效果圖吧~沒看過vue-router的同學請自行看文檔= =…我這里只是最基礎的展示了而已

主頁 

http://localhost:8181/#/index

信息 

http://localhost:8181/#/info

發現 

http://localhost:8181/#/discovery

設置 

http://localhost:8181/#/setting

其實都是一些很簡單的代碼和組件劃分,大家應該看一看就明白的了,最后vux你快更新2.0吧555~不說了我去看vuex了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲性视频网站| 亚洲一级一级97网| 日韩毛片中文字幕| 国产69精品久久久| www.亚洲天堂| 精品亚洲一区二区三区四区五区| 国内精品久久久久久中文字幕| 日韩经典中文字幕在线观看| 久久久久久久国产| 国产玖玖精品视频| 久久久精品久久久久| 动漫精品一区二区| 成人情趣片在线观看免费| 欧美黑人又粗大| 一区二区三区在线播放欧美| 亚洲免费影视第一页| 一本一本久久a久久精品综合小说| 国产精品久久久久久久天堂| 粉嫩av一区二区三区免费野| 久久在线视频在线| 欧美成人激情视频免费观看| 欧美另类在线观看| 在线播放亚洲激情| 日韩中文综合网| 国产在线拍揄自揄视频不卡99| 国产一区二区黑人欧美xxxx| 一区二区欧美亚洲| 国产精品久久久久久久av电影| 国内偷自视频区视频综合| 欧美丝袜美女中出在线| 国产一区二区三区久久精品| 亚洲精品一区av在线播放| 精品美女永久免费视频| 国产精品久久久久久久久久久新郎| 亚洲综合精品一区二区| 国产精品久久久久久久美男| 另类天堂视频在线观看| 国产午夜精品美女视频明星a级| 日韩人体视频一二区| 国产精品久久久久91| 欧美成人激情在线| 中文在线不卡视频| 97精品伊人久久久大香线蕉| 精品中文字幕在线2019| 久久艳片www.17c.com| 在线看日韩欧美| 国产丝袜一区二区三区| 亚洲女人被黑人巨大进入al| 日韩高清有码在线| 久久久免费电影| 亚洲欧美日韩天堂| 国产精品视频一区二区高潮| www日韩欧美| 精品久久在线播放| 91香蕉嫩草神马影院在线观看| 欧美另类在线播放| 在线观看91久久久久久| 久久久久久国产精品三级玉女聊斋| 在线播放精品一区二区三区| 青青久久av北条麻妃黑人| 久久精品国产久精国产思思| 一个人www欧美| 91久久国产精品91久久性色| 亚洲xxxxx性| 亚洲人成在线观看| 97在线看免费观看视频在线观看| 久久久免费观看视频| 欧美日韩国产成人在线观看| 午夜精品久久久久久99热软件| 日韩a**中文字幕| 国产精品成人aaaaa网站| 欧美日韩免费网站| 亚洲欧美日韩中文在线制服| 国产日本欧美在线观看| 亚洲成人精品视频在线观看| 成人h片在线播放免费网站| 久久影院资源网| 国产成人涩涩涩视频在线观看| 国产黑人绿帽在线第一区| 在线观看国产精品日韩av| 国产亚洲精品久久久久久牛牛| 欧美国产第二页| 欧美极品少妇xxxxⅹ喷水| 国产大片精品免费永久看nba| 91成人在线视频| 欧美极品在线播放| 91午夜理伦私人影院| 黄网站色欧美视频| 精品毛片三在线观看| 日韩精品在线影院| 91免费精品国偷自产在线| 成人www视频在线观看| 亚洲欧美国产视频| 中文字幕精品www乱入免费视频| 亚洲国产成人在线视频| 黑人巨大精品欧美一区二区免费| 日韩欧美成人网| 色综合伊人色综合网站| 亚洲一区二区三区久久| 欧美日韩中国免费专区在线看| 成人做爰www免费看视频网站| 亚洲国产高清自拍| 一本色道久久综合亚洲精品小说| 国产精品视频久久| 欧美精品在线播放| 国产精品视频xxx| 97精品免费视频| 97av在线视频| 亚洲片国产一区一级在线观看| 欧美激情在线有限公司| 亚洲精品资源美女情侣酒店| 欧美多人乱p欧美4p久久| 91精品国产综合久久香蕉最新版| 欧美日韩免费在线| 成人福利网站在线观看| 国产一区二区三区精品久久久| 欧美日韩在线观看视频| 精品国产鲁一鲁一区二区张丽| 欧美xxxx做受欧美.88| 中文字幕一区日韩电影| 欧美国产日韩一区二区在线观看| 亚洲男人天堂九九视频| 久久夜精品va视频免费观看| 日韩在线视频免费观看高清中文| 欧美在线一区二区视频| 亚洲最大福利网| 亚洲精品欧美日韩| 17婷婷久久www| 久久久欧美精品| 久久久精品999| 国产精品日本精品| 亚洲缚视频在线观看| 亚洲天堂成人在线视频| 亚洲国产精品va在看黑人| 亚洲成人久久久| 日韩高清免费观看| 国产精品高潮在线| 国产亚洲一级高清| 欧美性猛交xxxx黑人| 欧美洲成人男女午夜视频| 亚洲成人免费网站| 欧美日韩福利电影| 91久久国产精品| 亚洲国内精品在线| 日产精品久久久一区二区福利| 免费91在线视频| 美女国内精品自产拍在线播放| 色综合久久久久久中文网| 色系列之999| 日韩精品在线影院| 中文字幕亚洲第一| 日韩av综合网| 精品无码久久久久久国产| 亚洲激情在线观看| 国产高清视频一区三区| 国产精品一区专区欧美日韩| 亚洲男人天堂2024| 日韩美女福利视频| 欧美日韩成人在线播放| 日韩福利视频在线观看| 97久久精品人人澡人人爽缅北| 欧美综合国产精品久久丁香| 国产精品久久久久久超碰| 国产欧美久久一区二区|