js 實現(xiàn)vue—引入子組件props傳參

參考:https://www.cnblogs.com/xiaohuochai/p/7388866.html

效果:


props傳參.gif

html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <title>js實現(xiàn)vue—引入子組件props傳參</title>
        <link rel="stylesheet" href="css/1.css">
        <script type="text/javascript" src="js/jquery.js"></script>
        <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
        <script src="https://cdn.staticfile.org/vue-router/2.7.0/vue-router.min.js"></script>
        <script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
        <script src="js/1.js"></script>
    </head>
    <body>
        <div id="app">
            <keep-alive>
                <router-view class="child-view" v-if="$route.meta.keepAlive"></router-view>
            </keep-alive>

            <router-view class="child-view" v-if="!$route.meta.keepAlive"></router-view>
        </div>
        <script type="text/x-template" id="page1">
            <div>
                <TopNav :show-btn="ifShow"></TopNav>,
                <!-- 對于props聲明的屬性來說淮椰,在父級HTML模板中惜索,屬性名需要使用中劃線寫法 -->
                <p class="content">頁面1</p>
                <router-link to="/page2" tag="span" class="btnRouter">頁面2</router-link>
                <BlankPage id="BlankPage1"></BlankPage> 
                <!-- 多個組件引入同一組件改變顯示/隱藏狀態(tài)時蟹瘾,需綁定指定id萄焦,否則多個組件會混亂 -->         
            </div>
        </script>

        <script type="text/x-template" id="page2">
            <div>
                <TopNav :show-btn="ifShow"></TopNav>
                <p class="content">頁面2</p>
                <BlankPage id="BlankPage2"></BlankPage>
            </div>
        </script>
    </body>
</html>

1.js:

$(document).ready(function() {
    Vue.prototype.$show = function(obj) { //全局函數(shù)1
        var o = $(obj);
        o.css('display', 'block');
    };
    Vue.prototype.$hide = function(obj) { //全局函數(shù)2
        var o = $(obj);
        o.css('display', 'none');
    };

    Vue.use(VueRouter);

    // 頂部組件  start
    var TopNav = Vue.extend({
        data() {
            return {
                showBtn: false
            }
        },
        props: ['showBtn'],
        watch: {
            showBtn: function(newVal, oldVal) {
                this.showBtn = newVal;
            }
        },
        template: "<p class='title'> " +
            "<span>頂部組件</span>" +
            "<span v-show='showBtn' class='btnBack' @click='$router.back(-1)'>返回</span>" +
            "</p>"
    })
    /* 子級props屬性聲明時段磨,使用小駝峰或者中劃線寫法都可以憾儒;
       而子級模板使用從父級傳來的變量時碰声,需要使用對應(yīng)的小駝峰寫法
    */

    // 頂部組件  end

    // 正在加載組件  start
    var BlankPage = Vue.extend({
        template: "<div class='BlankPage'>" +
            "<div class='loadingDiv'>" +
            "<p class='loadingIcon'>" +
            "<img src='img/load.gif' alt=''>" +
            "</p>" +
            "<p class='loadingTxt'>正在加載...</p>" +
            "</div>" +
            "</div>"
    })
    // 正在加載組件  end

    // 頁面1  start
    var Page1 = Vue.extend({
        data() {
            return {
                ifShow: false
            }
        },
        template: "#page1",
        // 局部注冊子組件
        components: {
            TopNav,
            BlankPage
        }
    })
    //頁面1  end

    //頁面2  start
    var Page2 = Vue.extend({
        data() {
            return {
                ifShow: true
            }
        },
        template: "#page2",
        components: {
            TopNav,
            BlankPage
        }
    })
    //頁面2  end

    var router = new VueRouter({
        routes: [{
                path: '/',
                name: 'Page1',
                meta: {
                    index: 0,
                    keepAlive: true,
                    title: '頁面1'
                },
                component: Page1
            },
            {
                path: '/page2',
                name: 'Page2',
                meta: {
                    index: 1,
                    keepAlive: false,
                    title: '頁面2'
                },
                component: Page2
            }
        ]
    })

    router.beforeEach((to, from, next) => {
        var toDepth = to.meta.index;
        var fromDepth = from.meta.index;

        if (to.meta.title) {
            document.title = to.meta.title;
        }

        if (toDepth == 'undefined' || toDepth == undefined) {
            if (true) {
                //這個可以關(guān)閉安卓系統(tǒng)的手機(jī)
                document.addEventListener('WeixinJSBridgeReady', function() {
                    WeixinJSBridge.call('closeWindow');
                }, false);
                //這個可以關(guān)閉ios系統(tǒng)的手機(jī)
                WeixinJSBridge.call('closeWindow');
                // wx.closeWindow();
            }
            return;
        } else if (toDepth < fromDepth) { //返回
            from.meta.keepAlive = false;
            to.meta.keepAlive = true;
        }
        next()
    })

    var app = new Vue({
        el: '#app',
        router
    }).$mount('#app')
})

1.css:

@CHARSET "UTF-8";

body {
    width: 100%;
    height: 100%;
}

body,
div,
p {
    margin: 0;
    padding: 0;
    text-align: center;
}

.content {
    margin-top: 200px;
}

.title {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 60px;
    padding-left: 50px;
    line-height: .60px;
    display: flex;
    align-items: center;
    color: #fff;
    background-color: lightseagreen;
    z-index: 1;
}

.btnBack {
    margin-left: 50%;
}

.btnRouter {
    width: 100px;
    height: 30px;
    line-height: 30px;
    margin-top: 20px;
    display: inline-block;
    background-color: lightseagreen;
    color: #fff;
    border-radius: 10px;
}

.NoMore {
    font-size: 14px;
    color: #888;
    margin-top: 30px;
    text-align: center
}

#NoMore1,
#NoMore2 {
    display: none;
}

.NoMoreTxt:before {
    content: "";
    width: 100px;
    height: 1px;
    display: inline-block;
    margin-bottom: 5px;
    margin-right: 1px;
    background-color: #dadada;
}

.NoMoreTxt:after {
    content: "";
    width: 100px;
    height: 1px;
    display: inline-block;
    background-color: #dadada;
    margin-bottom: 5px;
    margin-left: 10px;
}

#BlankPage1,
#BlankPage2 {
    display: none;
}

.BlankPage {
    width: 100%;
    height: 100%;
    font-size: 14px;
    color: #fff;
    background-color: #fff;
    -webkit-transition: all .2s ease-out;
    transition: all .5s ease-out;
    transition: all .5s ease-out;
    transition: all .5s ease-out;
    position: fixed;
    top: 0;
    z-index: 12;
}

.loadingDiv {
    position: fixed;
    top: 45%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 120px;
    height: 50px;
}

.loadingTxt {
    font-size: 14px;
    color: #666;
    text-align: center;
}

.loadingIcon {
    text-align: center;
}

.loadingIcon img {
    display: inline-block;
    width: 40%;
    height: 48px;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烫饼,隨后出現(xiàn)的幾起案子铅鲤,更是在濱河造成了極大的恐慌,老刑警劉巖枫弟,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鹏往,居然都是意外死亡淡诗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門伊履,熙熙樓的掌柜王于貴愁眉苦臉地迎上來韩容,“玉大人,你說我怎么就攤上這事唐瀑∪盒祝” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵哄辣,是天一觀的道長请梢。 經(jīng)常有香客問我赠尾,道長,這世上最難降的妖魔是什么毅弧? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任气嫁,我火速辦了婚禮,結(jié)果婚禮上够坐,老公的妹妹穿的比我還像新娘寸宵。我一直安慰自己,他們只是感情好元咙,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布梯影。 她就那樣靜靜地躺著,像睡著了一般庶香。 火紅的嫁衣襯著肌膚如雪甲棍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天脉课,我揣著相機(jī)與錄音救军,去河邊找鬼。 笑死倘零,一個胖子當(dāng)著我的面吹牛唱遭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呈驶,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼拷泽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了袖瞻?” 一聲冷哼從身側(cè)響起司致,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎聋迎,沒想到半個月后脂矫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霉晕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年庭再,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牺堰。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拄轻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伟葫,到底是詐尸還是另有隱情恨搓,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站斧抱,受9級特大地震影響常拓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夺姑,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一墩邀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盏浙,春花似錦眉睹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丐黄,卻和暖如春斋配,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灌闺。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工艰争, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桂对。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓甩卓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蕉斜。 傳聞我的和親對象是個殘疾皇子逾柿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

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