vueRouter

基本使用

  • 1.什么是Vue Router?

    • Vue Router和v-if/v-show一樣,是用來切換組件的顯示的
    • v-if/v-show是標(biāo)記來切換(true/false)
      Vue Router用哈希來切換(#/xxx)
      比v-if/v-show強(qiáng)大的是Vue Router不僅僅能夠切換組件的顯示, 還能夠在切換的時(shí)候傳遞參數(shù)
  • 2.Vue Router使用步驟

    • 2.1導(dǎo)入Vue Router,定義組件
    • 2.2定義路由規(guī)則
    • 2.3根據(jù)路由規(guī)則創(chuàng)建路由對(duì)象
    • 2.4將路徑對(duì)象掛載到Vue實(shí)例中
    • 2.5修改URL哈希值
    • 2.6通過<router-view>渲染匹配的組件
    • 示例:
<script src="js/vue-router.js"></script>
<div id="app">
    <!--5.修改URL哈希值-->
    <a href="#/one">切換到第一個(gè)界面</a>
    <a href="#/two">切換到第二個(gè)界面</a>
    <!-- 路由出口 -->
    <!-- 6.路由匹配到的組件將渲染在這里 -->
    <router-view></router-view>
</div>
<template id="one">
    <div class="onepage">
        <p>我是第一個(gè)界面</p>
    </div>
</template>
<template id="two">
    <div class="twopage">
        <p>我是第二個(gè)界面</p>
    </div>
</template>
<script>
// 1.定義組件
const one = {
    template: "#one"
};
const two = {
    template: "#two"
};
// 2.定義切換的規(guī)則(定義路由規(guī)則)
const routes = [
    // 數(shù)組中的每一個(gè)對(duì)象就是一條規(guī)則
    { path: '/one', component: one },
    { path: '/two', component: two }
];
// 3.根據(jù)自定義的切換規(guī)則創(chuàng)建路由對(duì)象
const router = new VueRouter({
    routes: routes
});
// 4.將創(chuàng)建好的路由對(duì)象綁定到Vue實(shí)例上
let vue = new Vue({
    el: '#app',
    router: router,
    components: {
        one: one,
        two: two
    }
});
</script>
router-link
  • 1.什么是router-link?

    • 通過a標(biāo)簽確實(shí)能設(shè)置URL的hash,但是這種方式并不專業(yè)
    • 在Vue Router中提供了一個(gè)專門用于設(shè)置hash的標(biāo)簽 router-link
    • 如果是通過router-link來設(shè)置URL的HASH值, 那么不用寫#,它是通過to屬性來設(shè)置HASH值
    • 格式:<router-link to="/類名"></router-link>
  • 2.router-link特點(diǎn)

    • 默認(rèn)情況下Vue會(huì)將router-link渲染成a標(biāo)簽, 但是我們可以通過tag來指定到底渲染成什么
    • 格式:<router-link to="/類名" tag="標(biāo)簽名"></router-link>
  • 3.給router-link設(shè)置選中樣式

    • 默認(rèn)情況下我們可以通過重寫router-link-active類名來實(shí)現(xiàn)設(shè)置選中樣式
    • 但是我們也可以通過linkActiveClass來指定選中樣式
  • 4.重定向路由

    • { path: '被重定向值', redirect: '重定向之后的值' }
    • 這樣就可以設(shè)置初次打開頁面顯示的內(nèi)容
  • 示例(上節(jié)示例的優(yōu)化版):

<style>
    *{
        margin: 0;
        padding: 0;
    }
    .onepage, .twopage{
        width: 500px;
        height: 500px;
    }
    .onepage{
        background: pink;
    }
    .twopage{
        background: skyblue;
    }
    /*.router-link-active{*/
    /*    background: red;*/
    /*}*/
    .nj-active{
        background: skyblue;
    }
</style>
<script src="js/vue.js"></script>
<!--1.導(dǎo)入Vue Router-->
<!--注意點(diǎn): 必須先導(dǎo)入Vue之后再導(dǎo)入Vue Router-->
<script src="js/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-link to="/one" tag="button">切換到第一個(gè)界面</router-link>
    <router-link to="/two" tag="button">切換到第二個(gè)界面</router-link>
    <!-- 路由出口 -->
    <!-- 路由匹配到的組件將渲染在這里 -->
    <router-view></router-view>
</div>
<template id="one">
    <div class="onepage">
        <p>我是第一個(gè)界面</p>
    </div>
</template>
<template id="two">
    <div class="twopage">
        <p>我是第二個(gè)界面</p>
    </div>
</template>
<script>
const one = {
    template: "#one"
};
const two = {
    template: "#two"
};
const routes = [
    // 重定向路由
    { path: '/', redirect: '/two' },
    // 數(shù)組中的每一個(gè)對(duì)象就是一條規(guī)則
    { path: '/one', component: one },
    { path: '/two', component: two }
];
const router = new VueRouter({
    routes: routes,
    // 指定導(dǎo)航激活狀態(tài)樣式類名
    linkActiveClass: "ws-active"
});
let vue = new Vue({
    el: '#app',
    // 4.將創(chuàng)建好的路由對(duì)象綁定到Vue實(shí)例上
    router: router,
    // 專門用于定義局部組件的
    components: {
        one: one,
        two: two
    }
});
</script>

VueRouter-參數(shù)傳遞

  • 1.Vue Router傳遞參數(shù)
    • 只要將Vue Router掛載到了Vue實(shí)例對(duì)象上, 我們就可以通過vue.$route拿到路由對(duì)象频丘,只要能拿到路由對(duì)象,就可以通過路由對(duì)象拿到傳遞的參數(shù)
      • 方式一:通過URL參數(shù)的方式傳遞,在指定HASH的時(shí)候,通過?key=value&key=value的方式傳遞,在傳遞的組件的生命周期方法中 通過this.$route.query獲取
      • 方式二:通過路由規(guī)則中的占位符傳遞
        在指定路由規(guī)則的時(shí)候通過/:key/:key的方式來指定占位符.在路徑中指定HASH的時(shí)候,通過/value/value的方式來傳遞值.在傳遞的組件的生命周期方法中通過this.$route.params的方式來獲取
      • 示例(沿用上個(gè)示例):
<style>
    *{
        margin: 0;
        padding: 0;
    }
    .onepage, .twopage{
        width: 500px;
        height: 500px;
    }
    .onepage{
        background: pink;
    }
    .twopage{
        background: skyblue;
    }
    .nj-active{
        background: skyblue;
    }
</style>
<script src="js/vue.js"></script>
<script src="js/vue-router.js"></script>

<div id="app">
    <!--第一種傳遞參數(shù)的方式: -->
    <router-link to="/one?name=lnj&age=33" tag="button">切換到第一個(gè)界面</router-link>
    <!--第二種傳遞參數(shù)的方式: -->
    <router-link to="/two/zs/66" tag="button">切換到第二個(gè)界面</router-link>
    <router-view></router-view>
</div>
<template id="one">
    <div class="onepage">
        <p>我是第一個(gè)界面</p>
    </div>
</template>
<template id="two">
    <div class="twopage">
        <p>我是第二個(gè)界面</p>
    </div>
</template>
<script>
// 1.定義組件
const one = {
    template: "#one",
    <!--第一種傳遞參數(shù)方法-->
    created: function () {
        console.log(this.$route.query.name);
        console.log(this.$route.query.age);
    }
};
const two = {
    template: "#two",
    <!--第二種傳遞參數(shù)方法-->
    created: function () {
        console.log(this.$route);
        console.log(this.$route.params.name);
        console.log(this.$route.params.age);
    }
};
// 2.定義切換的規(guī)則(定義路由規(guī)則)
const routes = [
    // 數(shù)組中的每一個(gè)對(duì)象就是一條規(guī)則
    { path: '/one', component: one },
    <!--第二種傳遞參數(shù)方法-->
    { path: '/two/:name/:age', component: two }
];
// 3.根據(jù)自定義的切換規(guī)則創(chuàng)建路由對(duì)象
const router = new VueRouter({
    routes: routes,
    linkActiveClass: "ws-active"
});

let vue = new Vue({
    el: '#app',
    // 4.將創(chuàng)建好的路由對(duì)象綁定到Vue實(shí)例上
    router: router,
    // 專門用于定義局部組件的
    components: {
        one: one,
        two: two
    }
});
</script>

嵌套路由

  • 什么是嵌套路由?
    • 嵌套路由也稱之為子路由,就是在被切換的組件中又切換其它子組件
    • 示例: 在one界面中又有兩個(gè)按鈕,通過這兩個(gè)按鈕進(jìn)一步切換one中的內(nèi)容
<style>
    *{
        margin: 0;
        padding: 0;
    }
    .onepage, .twopage{
        width: 500px;
        height: 500px;
    }
    .onepage{
        background: pink;
    }
    .twopage{
        background: skyblue;
    }
    .onesub1page, .onesub2page{
        width: 100%;
        height: 300px;
    }
    .onesub1page{
        background: orangered;
    }
    .onesub2page{
        background: blueviolet;
    }
    .nj-active{
        background: skyblue;
    }
</style>
<script src="js/vue.js"></script>
<script src="js/vue-router.js"></script>

<div id="app">
    <router-link to="/one" tag="button">切換到第一個(gè)界面</router-link>
    <router-link to="/two" tag="button">切換到第二個(gè)界面</router-link>
    <router-view></router-view>
</div>
<template id="one">
    <div class="onepage">
        <p>我是第一個(gè)界面</p>
        <router-link to="/one/onesub1" tag="button">切換到第一個(gè)子界面</router-link>
        <router-link to="/one/onesub2" tag="button">切換到第二個(gè)子界面</router-link>
        <router-view></router-view>
    </div>
</template>
<template id="onesub1">
    <div class="onesub1page">
        <p>我是第一個(gè)界面子界面1</p>
    </div>
</template>
<template id="onesub2">
    <div class="onesub2page">
        <p>我是第一個(gè)界面子界面2</p>
    </div>
</template>
<template id="two">
    <div class="twopage">
        <p>我是第二個(gè)界面</p>
    </div>
</template>
<script>
// 1.定義組件
const onesub1 = {
    template: "#onesub1",
};
const onesub2 = {
    template: "#onesub2",
};
const one = {
    template: "#one",
    components:{
        onesub1:onesub1,
        onesub2: onesub2
    }
};
const two = {
    template: "#two"
};
// 2.定義切換的規(guī)則(定義路由規(guī)則)
const routes = [
    {
        path: '/one',
        component: one,
        children:[
            {
            // 如果是嵌套路由(子路由),那么不用寫一級(jí)路徑的地址, 并且也不用寫/
                path: "onesub1",
                component: onesub1
            },
            {
                path: "onesub2",
                component: onesub2
            }
        ]
    },
    { path: '/two', component: two }
];
// 3.根據(jù)自定義的切換規(guī)則創(chuàng)建路由對(duì)象
const router = new VueRouter({
    routes: routes,
    linkActiveClass: "ws-active"
});
let vue = new Vue({
    el: '#app',
    // 4.將創(chuàng)建好的路由對(duì)象綁定到Vue實(shí)例上
    router: router,
    // 專門用于定義局部組件的
    components: {
        one: one,
        two: two
    }
});
</script>
  • ==注意點(diǎn)==:
    • 如果是嵌套路由(子路由),那么不用寫一級(jí)路徑的地址, 并且也不用寫/

命名視圖

  • 什么是命名視圖?
    • 命名視圖和前面講解的具名插槽很像,都是讓不同的出口顯示不同的內(nèi)容
    • 命名視圖就是當(dāng)路由地址被匹配的時(shí)候同時(shí)指定多個(gè)出口,并且每個(gè)出口中顯示的內(nèi)容不同
    • 示例:
<style>
    *{
        margin: 0;
        padding: 0;
    }
    .onepage, .twopage{
        width: 200px;
        height: 200px;
    }
    .onepage{
        background: pink;
    }
    .twopage{
        background: skyblue;
    }
    .nj-active{
        background: skyblue;
    }
</style>
<script src="js/vue.js"></script>
<script src="js/vue-router.js"></script>

<div id="app">
    <router-view name="name1"></router-view>
    <router-view name="name2"></router-view>
</div>
<template id="one">
    <div class="onepage">
        <p>我是第一個(gè)界面</p>
    </div>
</template>
<template id="two">
    <div class="twopage">
        <p>我是第二個(gè)界面</p>
    </div>
</template>
<script>
// 1.定義組件
const one = {
    template: "#one",
};
const two = {
    template: "#two"
};
// 2.定義切換的規(guī)則(定義路由規(guī)則)
const routes = [
    {
        path: '/',
        components: {
            name1: one,
            name2: two
        }
    },
];
// 3.根據(jù)自定義的切換規(guī)則創(chuàng)建路由對(duì)象
const router = new VueRouter({
    routes: routes,
    linkActiveClass: "ws-active"
});
let vue = new Vue({
    el: '#app',
    // 4.將創(chuàng)建好的路由對(duì)象綁定到Vue實(shí)例上
    router: router,
    // 專門用于定義局部組件的
    components: {
        one: one,
        two: two
    }
});
</script>
  • ==注意點(diǎn)==:
    • 1.和匿名插槽一樣,如果指定了多個(gè)router-view, 那么當(dāng)路由地址被匹配之后,多個(gè)router-view中顯示的內(nèi)容是一樣的
    • 2.和具名插槽一樣,如果想同時(shí)顯示多個(gè)不同的組件, 那么可以給出口指定名稱

Watch屬性

  • 1.什么是Watch屬性?
    • Watch屬性是專門用于監(jiān)聽數(shù)據(jù)變化的, 只要數(shù)據(jù)發(fā)生了變化,就會(huì)自動(dòng)調(diào)用對(duì)應(yīng)數(shù)據(jù)的回調(diào)方法
    • 格式如下:
"$route.path": function (newValue,oldValue)              {
              console.log(newValue, oldValue);
              }
  • 2.Watch監(jiān)聽路由變化
    • Watch屬性不僅僅能夠監(jiān)聽數(shù)據(jù)的變化,還能夠監(jiān)聽路由地址的變化,只要路由地址發(fā)生變化, 就會(huì)自動(dòng)調(diào)用對(duì)應(yīng)的回調(diào)函數(shù).
    • 在企業(yè)開發(fā)中我們可以通過Watch來判斷當(dāng)前界面是從哪個(gè)界面跳轉(zhuǎn)過來的
    • 示例:
<div id="app">
    <input type="text" v-model="num1">
    <span>+</span>
    <input type="text" v-model="num2">
    <span>=</span>
    <input type="text" disabled v-model="res">
</div>
<script>
// 1.定義組件
const one = {
    template: "#one",
};
const two = {
    template: "#two"
};
// 2.定義切換的規(guī)則(定義路由規(guī)則)
const routes = [
    { path: '/one', component: one },
    { path: '/two', component: two }
];
// 3.根據(jù)自定義的切換規(guī)則創(chuàng)建路由對(duì)象
const router = new VueRouter({
    routes: routes
});
let vue = new Vue({
    el: '#app',
    // 4.將創(chuàng)建好的路由對(duì)象綁定到Vue實(shí)例上
    router: router,
    watch: {
        // 可以通過watch監(jiān)聽Model中數(shù)據(jù)的變化, 只要數(shù)據(jù)發(fā)生變化, 就會(huì)自動(dòng)調(diào)用對(duì)應(yīng)的回調(diào)函數(shù)
      num1: function (newValue, oldValue) {
          this.res = parseInt(this.num1) + parseInt(this.num2)
      },
      num2: function (newValue, oldValue) {
          this.res = parseInt(this.num1) + parseInt(this.num2)
      }
    },
    data: {
        num1: 0,
        num2: 0,
        res: 0
    },
    // 專門用于存儲(chǔ)監(jiān)聽事件回調(diào)函數(shù)
    methods: {
    /*   不用watch抛腕,用鼠標(biāo)抬起keyup的寫法
        change1(){
            this.res = parseInt(this.num1) + parseInt(this.num2)
        },
        change2(){
            this.res = parseInt(this.num1) + parseInt(this.num2)
        }
    */
    },
    // 專門用于定義局部組件的
    components: {
        one: one,
        two: two
    }
});
</script>

生命周期方法

  • 1.什么是生命周期方法?

    • 和webpack生命周期方法一樣,都是在從生到死的特定階段調(diào)用的方法
    • PS: 生命周期鉤子 = 生命周期函數(shù) = 生命周期事件
  • 2.Vue生命周期方法分類

    • 2.1創(chuàng)建期間的生命周期方法
      • beforeCreate:
        • 在調(diào)用beforeCreate的時(shí)候,僅僅表示Vue實(shí)例剛剛被創(chuàng)建出來。此時(shí)此刻還沒有初始化好Vue實(shí)例中的數(shù)據(jù)和方法,所以此時(shí)此刻還不能訪問Vue實(shí)例中保存的數(shù)據(jù)和方法
      • created:
        • 在調(diào)用created的時(shí)候,是我們最早能夠訪問Vue實(shí)例中保存的數(shù)據(jù)和方法的地方
      • beforeMount:
        • 在調(diào)用beforeMount的時(shí)候,表示Vue已經(jīng)編譯好了最終模板,但是還沒有將最終的模板渲染到界面上
      • mounted:
        • 在調(diào)用mounted的時(shí)候,表示Vue已經(jīng)完成了模板的渲染,表示我們已經(jīng)可以拿到界面上渲染之后的內(nèi)容了
      • 示例:
<div id="app">
    <p>{{msg}}</p>
</div>
<!-- 以下是beforeMount時(shí)內(nèi)存中的狀態(tài)鹅很,而還沒有渲染到頁面上
<div id="app">
    <p>微雙</p>
</div>
-->

<script>
let vue = new Vue({
    beforeCreate:function(){
        // console.log(this.msg); // undefined
        // console.log(this.say); // undefined
    },
    created:function(){
        // console.log(this.msg); // 微雙
        // console.log(this.say);  // 輸出say的函數(shù)
    },
    beforeMount:function(){
        // console.log(document.querySelector("p").innerHTML);  // {{msg}}
        // console.log(document.querySelector("p").innerText);  // {{msg}}
    },
    mounted:function(){
        console.log(document.querySelector("p").innerHTML);  // 微雙
        console.log(document.querySelector("p").innerText);  // 微雙
    },
    el: '#app',
    data: {
        msg: "微雙"
    },
    // 專門用于存儲(chǔ)監(jiān)聽事件回調(diào)函數(shù)
    methods: {
        say(){
            console.log("say");
        }
    }
});
</script>
  • 2.2運(yùn)行期間的生命周期方法
    • beforeUpdate:
      • 在調(diào)用beforeUpdate的時(shí)候,表示Vue實(shí)例中保存的數(shù)據(jù)被修改了
      • ==注意點(diǎn)==:只有保存的數(shù)據(jù)被修改了才會(huì)調(diào)用beforeUpdate, 否則不會(huì)調(diào)用
      • ==注意點(diǎn)==:在調(diào)用beforeUpdate的時(shí)候, 數(shù)據(jù)已經(jīng)更新了,但是界面還沒有更新
    • updated:
      • 在調(diào)用updated的時(shí)候,表示Vue實(shí)例中保存的數(shù)據(jù)被修改了,并且界面也同步了修改的數(shù)據(jù)了住涉。
      • 也就是說:數(shù)據(jù)和界面都同步更新之后就會(huì)調(diào)用updated
    • 示例:
<div id="app">
    <p>{{msg}}</p>
</div>

<script>
let vue = new Vue({
    beforeUpdate:function(){
        // console.log(this.msg);  // 微雙2
        // console.log(document.querySelector("p").innerHTML);  // 微雙
        // console.log(document.querySelector("p").innerText);  // 微雙
    },
    updated:function(){
        console.log(this.msg);  // 微雙2
        console.log(document.querySelector("p").innerHTML);  // 微雙2
        console.log(document.querySelector("p").innerText);  // 微雙2
    },
    el: '#app',
    data: {
        msg: "微雙"  // 修改為微雙2后測試beforeUpdate和updated
    },
    // 專門用于存儲(chǔ)監(jiān)聽事件回調(diào)函數(shù)
    methods: {
        say(){
            console.log("say");
        }
    }
});
</script>
  • Vue實(shí)例對(duì)象可以看做是一個(gè)大的組件,我們自定義的組件可以看做是一個(gè)小的組件那么大的組件中可以使用的屬性和方法,在小的組件中也可以使用
    • 例如: 在Vue實(shí)例中我們可以添加data,methods, 那么在自定義的組件中也可以添加data, methods
    • 所以Vue實(shí)例中可以使用生命周期方法,組件中也可以使用生命周期方法
  • 2.3銷毀期間的生命周期方法
    • beforeDestroy:
      • 在調(diào)用beforeDestroy的時(shí)候,表示當(dāng)前組件即將被銷毀了
      • ==注意點(diǎn)==:只要組件不被銷毀,那么beforeDestroy就不會(huì)調(diào)用
      • ==beforeDestroy函數(shù)是我們最后能夠訪問到組件數(shù)據(jù)和方法的函數(shù)==
    • destroyed:
      • 在調(diào)用destroyed的時(shí)候,表示當(dāng)前組件已經(jīng)被銷毀了
      • ==注意點(diǎn)==:只要組件不被銷毀,那么destroyed就不會(huì)調(diào)用
      • ==不要在這個(gè)生命周期方法中再去操作組件中數(shù)據(jù)和方法==
    • 示例:
<div id="app">
    <button @click="change">切換</button>
    <!--通過v-if來切換, 會(huì)直接刪除和重新創(chuàng)建-->
    <one v-if="isShow"></one>
</div>
<template id="one">
    <div>
        <p>組件</p>
    </div>
</template>
<script>
    Vue.component("one", {
        template: "#one",
        data: function(){
            return {
                msg: "微雙"
            }
        },
        methods: {
            say(){
                console.log("say");
            }
        },
        beforeDestroy: function(){
            console.log("beforeDestroy");  // beforeDestroy
            console.log(this.msg);  // 微雙
            console.log(this.say);  // say函數(shù)
        },
        destroyed: function(){
            console.log("destroyed");  // destroyed
        }
    });
    let vue = new Vue({
        el: '#app',
        data: {
            isShow: true,
        },
        methods: {
            change(){
                this.isShow = !this.isShow;
            }
        }
    });
</script>

Vue-特殊特性

  • 1.Vue特殊特性

    • Vue特點(diǎn):數(shù)據(jù)驅(qū)動(dòng)界面更新,無需操作DOM來更新界面
    • 也就是說Vue不推薦我們直接操作DOM,但是在企業(yè)開發(fā)中有時(shí)候我們確實(shí)需要拿到DOM操作DOM裆站。那么如果不推薦使用原生的語法獲取DOM, 我們應(yīng)該如何獲取DOM?
    • 在Vue中如果想要拿到DOM元素我們可以通過ref來獲取
  • 2.ref使用

    • 2.1在需要獲取的元素上添加ref屬性.
      • 例如: <p ref="mypp">我是段落</>
    • 2.2在使用的地方通過this.$refs.xxx獲取
      • 例如 this.$ref.myppp
  • 3.ref特點(diǎn)

    • ref添加到元素DOM上, 拿到的就是元素DOM
    • ref添加到組件上, 拿到的就是組件
  • 獲取元素和組件

    • 如果是通過原生的語法來獲取元素,無論是原生的元素還是自定義的組件,拿到的都是原生的元素
      • 并且VUE官方并不推薦我們這樣獲取
    • 在Vue中如果想獲取原生的元素或者獲取自定義的組件, 可以通過ref來獲壤锰薄(vue推薦)
      • ==注意點(diǎn)==
        • ref如果是添加給元素的元素,那么拿到的就是元素的元素
        • ref如果是添加給自定義的組件,那么拿到的就是自定義的組件
  • 示例:

<div id="app">
    <button @click="myFn">我是按鈕</button>
    <p ref="myppp">我是原生的DOM</p>
    <one id="myOne" ref="myOne"></one>
</div>
<template id="one">
    <div>
        <p>我是組件</p>
    </div>
</template>
<script>
Vue.component("one", {
    template: "#one",
    data: function(){
        return {
            msg: "微雙"
        }
    },
    methods: {
        say(){
            console.log("say");
        }
    },
});
let vue = new Vue({
    el: '#app',
    methods: {
        myFn(){
            // VUE官方并不推薦我們這樣通過原生的語法來獲取元素
            // console.log(document.querySelector("p"));
            // console.log(document.querySelector("#myOne"));

            console.log(this.$refs);
            console.log(this.$refs.myppp);
            console.log(this.$refs.myOne);
            console.log(this.$refs.myOne.msg);
            console.log(this.$refs.myOne.say);
        }
    }
});
</script>

組件渲染方式

  • 1.Vue渲染組件的兩種方式
    • 1.1先定義注冊(cè)組件,然后在Vue實(shí)例中當(dāng)做標(biāo)簽來使用
    • 1.2先定義注冊(cè)組件,然后通過Vue實(shí)例的render方法來渲染
    • 示例:
// 第一種 在Vue實(shí)例中當(dāng)做標(biāo)簽來使用
<div id="app">
    <one></one>  // 輸出結(jié)果為one的組件展示在vue實(shí)例中
</div>
<template id="one">
    <div>
        <p>我是組件</p>
    </div>
</template>
<script>
Vue.component("one", {
    template: "#one"
});
let vue = new Vue({
    el: '#app'
});
</script>
// 第二種 通過Vue實(shí)例的render方法來渲染
<div id="app">    // 輸出結(jié)果為vue實(shí)例被One這個(gè)組件全覆蓋
</div>
<template id="one">
    <div>
        <p>我是組件</p>
    </div>
</template>
<script>
Vue.component("one", {
    template: "#one"
});
let vue = new Vue({
    el: '#app',
    render: function(createElement){
        let html = createElement("one");
        return html;
    }
});
</script>
  • 2.兩種渲染方法的區(qū)別
    • 1.1當(dāng)做標(biāo)簽來渲染,不會(huì)覆蓋Vue實(shí)例控制區(qū)域
    • 1.2通過render方法來渲染,會(huì)覆蓋Vue實(shí)例控制區(qū)域
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市帽哑,隨后出現(xiàn)的幾起案子谜酒,更是在濱河造成了極大的恐慌,老刑警劉巖妻枕,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僻族,死亡現(xiàn)場離奇詭異,居然都是意外死亡屡谐,警方通過查閱死者的電腦和手機(jī)述么,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愕掏,“玉大人度秘,你說我怎么就攤上這事《牛” “怎么了剑梳?”我有些...
    開封第一講書人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長滑潘。 經(jīng)常有香客問我垢乙,道長,這世上最難降的妖魔是什么众羡? 我笑而不...
    開封第一講書人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任侨赡,我火速辦了婚禮,結(jié)果婚禮上粱侣,老公的妹妹穿的比我還像新娘羊壹。我一直安慰自己,他們只是感情好齐婴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開白布油猫。 她就那樣靜靜地躺著,像睡著了一般柠偶。 火紅的嫁衣襯著肌膚如雪情妖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,166評(píng)論 1 308
  • 那天诱担,我揣著相機(jī)與錄音毡证,去河邊找鬼。 笑死蔫仙,一個(gè)胖子當(dāng)著我的面吹牛料睛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼恤煞,長吁一口氣:“原來是場噩夢啊……” “哼屎勘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起居扒,我...
    開封第一講書人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤概漱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后喜喂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓤摧,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年夜惭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姻灶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诈茧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捂掰,到底是詐尸還是另有隱情敢会,我是刑警寧澤,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布这嚣,位于F島的核電站鸥昏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏姐帚。R本人自食惡果不足惜吏垮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罐旗。 院中可真熱鬧膳汪,春花似錦、人聲如沸九秀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鼓蜒。三九已至痹换,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間都弹,已是汗流浹背娇豫。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畅厢,地道東北人冯痢。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親系羞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子郭计,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359