在webpack構(gòu)建的項目中使用Vue

一村视、普通網(wǎng)頁中使用Vue(Vue基礎(chǔ)學習)

  • 使用<script></script>標簽引入vue的包
  • 頁面中創(chuàng)建一個容器(id為app的div)
  • 通過new Vue創(chuàng)建Vue的vm實例

二屋灌、webpack工程中使用Vue——組件

  • npm i vue -S安裝Vue的包辑奈,入口JS導入vue的包import Vue from 'vue'

1、使用普通網(wǎng)頁使用Vue的方式

  • 頁面創(chuàng)建容器寞忿,定義組件模板對象,new Vue創(chuàng)建Vue實例顶岸,components注冊組件腔彰。
    此時運行會報錯,因為導入的是runtime-only的Vue包辖佣,不是最全的(普通網(wǎng)頁導入的是全的)霹抛。
    import Vue from 'vue'var Vue = require('vue')查找規(guī)則一樣:找項目根目錄node_moudules文件夾,根據(jù)引用時的包名查找文件夾vue凌简,在vue文件夾中找到一個 package.json 的包的配置文件,此配置文件中找到main屬性(制定了此包在被加載import/require時的入口文件)恃逻。

    其中雏搂,同目錄下的 vue.js 才是網(wǎng)頁直接導入時的最全的包。
  • 可以修改Vue的配置文件 package.json 的 main 屬性指向 vue.js 最全文件"main": "dist/vue.js"寇损;或import導入時直接指定vue.js最全文件 import Vue from '../node_modules/vue/dist/vue.js'凸郑;或者在 webpack.config.js 配置文件對象中加 resolve屬性(優(yōu)雅一些)。
module.exports = {
    resolve : {
        alias:{   //修改Vue被導入時包的路徑
            'vue$':'vue/dist/vue.js'   //導入的包是以vue結(jié)尾矛市,則取找此js文件
        }
    }
}

2芙沥、直接runtime-only

  • 創(chuàng)建 .vue 文件(在src目錄創(chuàng)建,和main.js同級浊吏,測試用)而昨,這是一個純粹的vue組件。webpack中推薦使用.vue這個模板文件定義組件找田。分三部分歌憨,<template></template>組件的html代碼;<script></script>邏輯墩衙;<style></style>樣式务嫡。
  • npm i vue-loader vue-template-compiler -D。webpack 無法打包 .vue 文件漆改,則需要安裝相關(guān)的第三方loader幫助把vue文件解析成JS文件心铃。
  • webpack.config.js 配置文件增加匹配規(guī)則,vue-loader 15+都是需要伴生 VueLoaderPlugin挫剑。
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
    plugins:[  
        // make sure to include the plugin for the magic
        new VueLoaderPlugin()
    ],
    module:{  
        rules:[ 
            {
                test:/\.vue$/,   //匹配.vue文件  
                use:'vue-loader'
            }
        ]
    }
}
  • main.js 使用 import 引入此vue組件去扣。
import login from './login.vue'

則就得到一個組件的模板對象 login(和直接定義一個模板對象差不多)。

  • 如果還是使用components注冊組件樊破,然后頁面標簽引入(傳統(tǒng)厅篓、vue基礎(chǔ)學習形式)秀存,還是會報runtime-only的錯誤。Vue結(jié)合webpack使用羽氮,想通過vue實例渲染一個組件到頁面或链,只能用render函數(shù)實現(xiàn)。
import Vue from 'vue'

import login from './login.vue'

var vm = new Vue({
    el: '#app',
    data: {
        msg: '測試'
    },
    render: c => c(login)
})

三档押、導入模塊和向外暴露成員

  • Node.js澳盐,向外暴露成員:
module.exports = {}
exports
  • Node.js,導入模塊(成員):
const 名稱= require('模塊標識符');
  • ES6令宿,向外暴露成員:
export default   //在一個模塊中叼耙,只允許向外暴露一次,可以用任意變量接收
export   //可以向外暴露多個成員粒没,只能使用 {} 接收(按需接收筛婉,嚴格按暴露變量名稱接收,也可別名)
//這兩種可以同時使用

測試:新建一個test.js癞松,向外暴露成員

var info = {
    name: 'qiurx',
    age: '24'
}
export default info
export var title = '標題'
export var content = '呵呵'
  • ES6爽撒,通過規(guī)范形式,導入/導出模塊:
import 模塊名 from '模塊標識符'
import '表示路徑'

測試:在main.js用import導入test.js响蓉,拿到暴露的對象(導入名稱自定)

import test,{ title,content as happy} from './test.js'
console.log(test);   //{name: "qiurx", age: "24"}
console.log(title);   //標題
console.log(happy);   //呵呵

四硕勿、.vue文件定義data/methods

<template>
  <div>
    <h1>登陸組件——{{msg}}</h1>
  </div>
</template>


<script>
export default {
  data() {
    //組件中的data指向函數(shù)
    return { msg: "123" };
  },
  methods: {
    show() {
      console.log("調(diào)用了login.vue的方法");
    }
  }
};
</script>


<style>
</style>

五、使用vue-router

  • npm i vue-router -S枫甲,安裝路由的包源武。
  • 在模塊化工程中(webpack等),必須通過Vue.use()明確安裝路由功能(script標簽不需要)想幻。
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)
  • 創(chuàng)建一個App.vue組件粱栖,import導入,render渲染組件脏毯。
  • 創(chuàng)建兩個組件(.vue)查排,import導入并創(chuàng)建路由對象,掛載到vue實例抄沮。
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

//導入App組件
import app from './App.vue'
//導入登陸注冊組件
import login from './main/login.vue'
import register from './main/register.vue'

//創(chuàng)建路由對象
var router = new VueRouter({
    routes:[
        {
            path:'/login',
            component:login
        },{
            path:'/register',
            component:register
        }
    ]
});
var vm = new Vue({
    el: '#app',
    data: {
        
    },
    render: c => c(app),   //注意:render會把el指定容器全覆蓋跋核,el容器內(nèi)部東西沒作用(不寫router-view等)
    router   //路由對象掛在到vue實例
})
  • 展示組件。通過render渲染的組件會直接清空覆蓋此容器叛买,最后展示的就是此組件App.vue砂代,所以要把<router-view></router-view>等寫到此組件中。
<template>
  <div>
    <h1>App</h1>
    <router-link to="/login">登陸</router-link>
    <router-link to="/register">注冊</router-link>
    <router-view></router-view>
  </div>
</template>
<script>
export default {};
</script>
<style>
</style>


六率挣、路由嵌套
入口JS(main.js)引入注冊組件的子組件刻伊,然后增加子路由匹配規(guī)則。

//導入注冊的子組件
import idCardReg from './mainChild/idCardReg.vue'
import phoneReg from './mainChild/phoneReg.vue'

//創(chuàng)建路由對象
var router = new VueRouter({ {
        path: '/register',
        component: register,
        children: [{   //路由嵌套
                path: 'idCardReg',
                component: idCardReg
            },
            {
                path: 'phoneReg',
                component: phoneReg
            }
        ]
    }]
});

注冊組件需要嵌套其他組件,則需要在注冊組件中創(chuàng)建鏈接捶箱。

<template>
  <div>
    <h1>注冊組件</h1>
    <router-link to='/register/idCardReg'>身份證</router-link>
    <router-link to='/register/phoneReg'>手機號</router-link>
    <router-view></router-view>
  </div>
</template>
<script>
export default {};
</script>
<style>
</style>

七狮暑、.vue組件樣式

  • 普通的 style 標簽只支持普通的樣式收恢,想要使用sass或less,需要增加lang屬性為scss/less
  • 組件 style 中的樣式默認是全局樣式,適用于頁面所有
  • style 標簽中增加scoped屬性 (作用域)按脚,即為此組件的私有樣式(包括自己的子組件软族、內(nèi)部元素)返十,一般都會加彭谁。是vue給元素自定義了屬性,設(shè)置樣式的時候通過屬性選擇器設(shè)置樣式共虑。
<template>
  <div>
    <h1>id注冊</h1>
  </div>
</template>
<script>
export default {};
</script>
<style scoped>
div {
  color: red;
}
</style>

八愧怜、抽離路由模塊
現(xiàn)在,會發(fā)現(xiàn)main.js的入口JS文件代碼量會多了妈拌,主要路由的量比較大拥坛。把導入路由組件和創(chuàng)建路由對象抽離出去。
創(chuàng)建一個 router.js 尘分,導入vue-router包猜惋,把導入路由組件、創(chuàng)建路由對象抽離放到這里音诫;然后把路由對象暴露出去惨奕。

import VueRouter from 'vue-router'


//導入登陸注冊組件
import login from './main/login.vue'
import register from './main/register.vue'
//導入注冊的子組件
import idCardReg from './mainChild/idCardReg.vue'
import phoneReg from './mainChild/phoneReg.vue'

//創(chuàng)建路由對象
var router = new VueRouter({
    routes: [{
        path: '/login',
        component: login
    }, {
        path: '/register',
        component: register,
        children: [{
                path: 'idCardReg',
                component: idCardReg
            },
            {
                path: 'phoneReg',
                component: phoneReg
            }
        ]
    }]
});

export default router   //把路由對象暴露出去

mian.js中再導入此自定義路由模塊雪位。

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

//導入App組件
import app from './App.vue'
//導入 自定義路由模塊
import router from './router.js'

var vm = new Vue({
    el: '#app',
    data: {

    },
    render: c => c(app), //注意:render會把el指定容器全覆蓋竭钝,el容器內(nèi)部東西沒作用(不寫router-view等)
    router //路由對象掛在到vue實例
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雹洗,隨后出現(xiàn)的幾起案子香罐,更是在濱河造成了極大的恐慌,老刑警劉巖时肿,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庇茫,死亡現(xiàn)場離奇詭異,居然都是意外死亡螃成,警方通過查閱死者的電腦和手機旦签,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寸宏,“玉大人宁炫,你說我怎么就攤上這事〉” “怎么了羔巢?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我竿秆,道長启摄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任幽钢,我火速辦了婚禮歉备,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搅吁。我一直安慰自己威创,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布谎懦。 她就那樣靜靜地躺著肚豺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪界拦。 梳的紋絲不亂的頭發(fā)上吸申,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音享甸,去河邊找鬼截碴。 笑死,一個胖子當著我的面吹牛蛉威,可吹牛的內(nèi)容都是我干的日丹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚯嫌,長吁一口氣:“原來是場噩夢啊……” “哼哲虾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起择示,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤束凑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后栅盲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汪诉,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年谈秫,在試婚紗的時候發(fā)現(xiàn)自己被綠了扒寄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拟烫,死狀恐怖该编,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情构灸,我是刑警寧澤上渴,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布岸梨,位于F島的核電站,受9級特大地震影響稠氮,放射性物質(zhì)發(fā)生泄漏曹阔。R本人自食惡果不足惜隔披,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧英上,春花似錦、人聲如沸相恃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至担巩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間先匪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工速缆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓晤碘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親园爷。 傳聞我的和親對象是個殘疾皇子宠蚂,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • vue-cli搭建項目 確保安裝了node與npm 再目標文件夾下打開終端 執(zhí)行cnpm i vue-cli -g...
    Akiko_秋子閱讀 3,238評論 1 22
  • MVVM Vue的指令 基本概念: Vue中指令都是以v-xx開頭,指令的作用童社,最終都是拿著數(shù)據(jù)求厕,渲染我們指令標簽...
    getElementsByMK閱讀 1,854評論 0 2
  • 什么是 webpack 是前端的一個項目構(gòu)建工具,他是基于 Node.js 開發(fā)出來的一個前端工具 如何完美實現(xiàn)上...
    千見閱讀 1,496評論 0 0
  • 摘要: 2016年最火的前端框架當屬Vue.js了扰楼,很多使用過vue的程序員這樣評價它呀癣,“vue.js兼具angu...
    OSC開源社區(qū)閱讀 23,666評論 2 149
  • 最近在單位遇到了一些系統(tǒng)性的問題。各種因素摻雜在一起弦赖,很難理出個頭緒项栏,俗話說的好,就像是一團亂麻蹬竖,剪不斷理還亂沼沈。 ...
    老麥2018閱讀 418評論 0 5