Vue WEB前端開發(fā)總結(jié)

Vue

Vue.js/vju?/,或簡稱為Vue)是一個用于創(chuàng)建用戶界面的開源JavaScript框架勒虾,也是一個創(chuàng)建單頁應(yīng)用Web應(yīng)用框架廓译。 2016年一項針對JavaScript的調(diào)查表明档插,Vue有著89%的開發(fā)者滿意度瘫拣。GitHub上,該項目平均每天能收獲95顆星肛响,為Github有史以來星標數(shù)第3多的項目岭粤。


  1. vue 移動端hybird 框架 混合app框架

  2. 安卓+ iOS 跨平臺的套殼程序

  3. vue : 適合中小型APP開發(fā) react/angularJS:適合大型APP開發(fā)

SPA:single page application ( 單頁應(yīng)用程序 )

  • 漸進式
    漸進增強 (向上兼容)
    優(yōu)雅降級 (向下兼容)
  • mvc設(shè)計理念
    m model 模型(數(shù)據(jù)層)
    v view試圖 (模板)
    *c * controller 控制層(業(yè)務(wù)層)
    注:實際開發(fā)中,如果使用了vue之后特笋,盡可能不操作dom剃浇,不使用jq js等。

Vue-指令

操作指令元素

用法:放置在元素內(nèi)部做屬性

名字 作用
v-test="dataname" 等價于innerText
v-html="elname" 將原來的節(jié)點替換為聲明的節(jié)點
v-show="true" 改掉元素的display
v-if="true" v-show一樣的功能 但是會刪掉節(jié)點//remove()
v-else v-if組成邏輯
v-else-if v-if組成邏輯
v-for="(v,k) in arr" 循環(huán)遍歷指令 值:{{ v }} 鍵:{{ k }}
v-onor@ 綁定事件v-on:事件名="函數(shù)名"or @click="函數(shù)名"
v-bind:屬性or : 動態(tài)綁定一個或多個屬性
v-model:"msg"or# 雙向數(shù)據(jù)綁定 只能給表單元素 指向value
v-pre 忽略解析 原樣輸出
v-cloak 解決數(shù)據(jù)被解析之前的閃爍問題
v-once 只渲染一次

鉤子函數(shù)

vue生命周期猎物,從創(chuàng)建到銷毀的過程虎囚,當實例化vue的時候會創(chuàng)建幾個相應(yīng)的狀態(tài),在某種情況下做特定的功能蔫磨,自動執(zhí)行淘讥。

執(zhí)行函數(shù)

  • 對象創(chuàng)建狀態(tài)

    • beforeCreate 最先執(zhí)行的 廣告開場動畫

    • created 對象創(chuàng)建成功后 data數(shù)據(jù)已經(jīng)有了 模板沒有加載 可以 初始化數(shù)據(jù)

  • 模板掛載狀態(tài)

    • beforeMount獲取到了頁面的模板 還沒有進行替換

    • mounted模板已經(jīng)重新進行了渲染 頁面已經(jīng)有了結(jié)果

  • 修改數(shù)據(jù)狀態(tài)

    • beforeUpdate監(jiān)測mounted里面變更數(shù)據(jù)的操作才會觸發(fā)

    • updated同上

  • 對象銷毀狀態(tài)

    • beforeDestroy 在對象銷毀成功之前 結(jié)束動畫

    • destored 銷毀整個實例對象之后 渲染時不會觸發(fā) 榮登極樂

Vue請求

vue-resource 自帶的庫

Get

new Vue = ({
    el:"#app",
    data:{},
    created(){
        this.$http.get("data.php",{params:{userName:"memeda"}}).then(function(res){
            console.log(res);
        })
    }
})

Post

new Vue = ({
    el:"#app",
    data:{},
    created(){
        this.$http.post("data.php",{userName:"memeda"},{emulateJSON:true}).then(function(res){
            console.log(res);
        })
    }
})

Jsonp

new Vue = ({
    el:"#app",
    data:{},
    created(){
        this.$http.jsonp("data.php",{userName:"memeda"},{emulateJSON:true}).then(function(res){
            console.log(res);
        })
    }
})

Axios請求

Get

axios.get("data.php",{params:{user:"admin"}}).then((res)=>{
    console.log(res);
})

Post

axios.post("data.php","user:admin&pwd=123").then((res)=>{
    console.log(res);
})

組件

全局組件

在任何實例里面都能使用的就叫全局組件。

注冊全局組件

<body>
       <template id="memeda">
                <div>
                        <h1>{{ test }}</h1>
                        <button @click="test()">按鈕</button>
                </div>
    </template> 
</body>

<script>
Vue.component('myTest',{
template:'<h1>你好呀~</h1>',//或者定義template標簽 通過#memeda選擇器獲取 必須放在一個根節(jié)點里面
data:function(){//或者data(){}
    return {
       test:"測試組件" 
    }
},
methods:{
    function test(){
        console.log(111);
    }
}
})
</script>
//調(diào)用
<my-test></my-test>
this.$set.(this.arr,index,value)//解決修改組件內(nèi)部引用類型(數(shù)組堤如,對象)之后 頁面渲染不同步問題 

封裝底部導航demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdn.xiaohuwei.cn/vue.min.js"></script>
    <link rel="stylesheet"  integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    <style>
    a:hover{
        text-decoration: none;
        transform:scale(1.1);
        color:red;
    }
    a{
        text-decoration: none;
        font-size:20px;
        transition: .3s;
    }
    a:focus{
        text-decoration: none;
    }
*{
    padding:0;
}
    </style>
</head>
<body>
    <div id="box">
        <navbar></navbar>
    </div>
    <template id="navbar">
        <div class="container-fluid text-center bg-info" style="height: 50px; line-height: 60px;position: fixed;bottom: 2px;width: 100%;">
            <div class="row">
                <div class="col-xs-4">
                    <a @click.prevent="memeda(0)" href="#" class="glyphicon glyphicon-user" v-if="!arr[0]"></a>
                    <a @click.prevent="memeda(0)" href="#" class="glyphicon glyphicon-user" style="color:red" v-else></a>
                </div>
                <div class="col-xs-4">
                    <a href="#" @click.prevent="memeda(1)" class="glyphicon glyphicon-home" v-if="!arr[1]"></a>
                    <a href="#" @click.prevent="memeda(1)" class="glyphicon glyphicon-home" style="color:red" v-else></a>
                    </div>
                    <div class="col-xs-4">
                            <a href="#" @click.prevent="memeda(2)" class="glyphicon glyphicon-menu-hamburger" v-if="!arr[2]"></a>
                            <a href="#" @click.prevent="memeda(2)" class="glyphicon glyphicon-menu-hamburger" style="color:red" v-else></a>
                        </div>
            </div>
        </div>
    </template>
</body>
<script>
    const ops = {
        data(){
            return{
                arr:[0,0,0],
            }
        },
        template:"#navbar",
        methods: {
            memeda(index){
                this.arr.forEach((v,k)=>{
                    this.arr[k]=0;
                })
                this.$set(this.arr,index,1);
            }
        },

    };
    Vue.component("navbar",ops);
    new Vue({
        el:"#box"
    })
</script>
</html>

事件修飾符

<!-- 阻止單擊事件繼續(xù)傳播 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重載頁面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修飾符可以串聯(lián) -->
<a v-on:click.stop.prevent="doThat"></a>

<!-- 只有修飾符 -->
<form v-on:submit.prevent></form>

<!-- 添加事件監(jiān)聽器時使用事件捕獲模式 -->
<!-- 即元素自身觸發(fā)的事件先在此處理蒲列,然后才交由內(nèi)部元素進行處理 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只當在 event.target 是當前元素自身時觸發(fā)處理函數(shù) -->
<!-- 即事件不是從內(nèi)部元素觸發(fā)的 -->
<div v-on:click.self="doThat">...</div>

注冊局部組件

Vue.component('myTest',{
template:'<h1>你好呀~</h1>',//或者定義template標簽 通過#memeda選擇器獲取 必須放在一個根節(jié)點里面
components:{
    testson:{
        template:'<h1>你好呀~</h1>',
        data:function(){//或者data(){}
    return {
       test:"測試組件" 
    }
},
methods:{
    function test(){
        console.log(111);
    }
}
    }
}
})

//調(diào)用
只能在父組件模板里面調(diào)用

定義插槽

<template>
<slot></slot>
</template>
名稱 作用
prop 獲取一個組件外的值 作用:父子組件傳值
slot 插槽,用于構(gòu)建模板的時候占位搀罢,有具名和未具名的

父給子傳值

<body>
    <div id="app">
    <fuji></fuji>
    </div>
</body>
<script>
var vm =  new Vue({
    el:"#app",
    components:{
        "fuji":{
            data() {
                return {
                    msg:"父級組件",
                }
            },
            template:"<ziji :nihao='msg'></ziji>",// 將父級的msg通過:給綁定 調(diào)用子級組件 頁面顯示為msg
            components:{
                "ziji":{
                    props:["nihao"],//接受父級的值
                    data(){
                        return {
                            msg2:"子組件",
                        }
                    },
                    template:"<span>{{ nihao }}</span>",
                }
            }
        }
    }
})
</script>

子給父傳值

<body>
    <div id="app">
    <fuji></fuji>
    </div>
</body>
<script>
var vm =  new Vue({
    el:"#app",
    components:{
        "fuji":{
            data() {
                return {
                    msg:"父級組件",
                }
            },
            methods: {
                getval(val){//接值函數(shù)
                    this.msg = val;
                }
            },
      template:"<h1><ziji @change='getval'> </ziji>{{ msg }}</h1>",// 定義接值函數(shù) 頁面顯示為msg2
            components:{
                "ziji":{
                    data(){
                        return {
                            msg2:"子組件",
                        }
                    },
                    template:"<span></span>",
                    created() {
                        this.$emit("change",this.msg2);//模板掛載時 將變量拋出 誰拋的誰接
                    },
                }
            }
        }
    }
})
</script>

兄弟傳值

兄弟傳值為 兄弟B傳值給父級 然后父級再傳給兄弟A

<body>
    <div id="app">
    <fuji></fuji>
    </div>
    <template id="memeda">

        <h1>
                {{msg}}
            <zijione :lalala="key"></zijione>
            <zijitwo  @change='getval'><zijitwo>//定義接值函數(shù) 
        </h1>
    </template>
</body>
<script>
var vm =  new Vue({
    el:"#app",
    components:{
        "fuji":{
            data() {
                return {
                    msg:"父級組件",
                    key:""
                }
            },
            methods: {
                getval(val){//接值函數(shù)
                    this.key = val;
                }
            },
            template:"#memeda",// 定義接值函數(shù) 
            components:{
                "zijione":{
                    props:["lalala"],
                    data(){
                        return {
                            msg2:"子組件1",
                        }
                    },
                    template:"<span>{{ lalala }}</span>",//已經(jīng)接到值了
                    mounted() {

                    },
                },
                "zijitwo":{
                    data(){
                        return {
                            msg3:"子組件2",
                        }
                    },
                    template:"<span>{{msg3}}</span>",
                    created() {
                        this.$emit("change",this.msg3);//模板掛載時 將變量拋出
                    },
                }
            },
        },
    }
})
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝗岖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子榔至,更是在濱河造成了極大的恐慌抵赢,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唧取,死亡現(xiàn)場離奇詭異铅鲤,居然都是意外死亡,警方通過查閱死者的電腦和手機兵怯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門溯泣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來径玖,“玉大人,你說我怎么就攤上這事已脓。” “怎么了袜漩?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵绪爸,是天一觀的道長。 經(jīng)常有香客問我宙攻,道長奠货,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任座掘,我火速辦了婚禮递惋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溢陪。我一直安慰自己萍虽,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布形真。 她就那樣靜靜地躺著杉编,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咆霜。 梳的紋絲不亂的頭發(fā)上邓馒,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音蛾坯,去河邊找鬼光酣。 笑死,一個胖子當著我的面吹牛偿衰,可吹牛的內(nèi)容都是我干的挂疆。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼下翎,長吁一口氣:“原來是場噩夢啊……” “哼缤言!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起视事,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤胆萧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俐东,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跌穗,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年虏辫,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚌吸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡砌庄,死狀恐怖羹唠,靈堂內(nèi)的尸體忽然破棺而出奕枢,到底是詐尸還是另有隱情,我是刑警寧澤佩微,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布缝彬,位于F島的核電站,受9級特大地震影響哺眯,放射性物質(zhì)發(fā)生泄漏谷浅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一奶卓、第九天 我趴在偏房一處隱蔽的房頂上張望一疯。 院中可真熱鬧,春花似錦寝杖、人聲如沸违施。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磕蒲。三九已至,卻和暖如春只盹,著一層夾襖步出監(jiān)牢的瞬間辣往,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工殖卑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留站削,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓孵稽,卻偏偏與公主長得像许起,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菩鲜,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

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

  • 一:什么是閉包园细?閉包的用處? (1)閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)接校。在本質(zhì)上猛频,閉包就 是將函數(shù)內(nèi)部和函數(shù)外...
    xuguibin閱讀 9,549評論 1 52
  • AngularJS是什么? AngularJs(簡稱ng)是一個用于設(shè)計動態(tài)web應(yīng)用的結(jié)構(gòu)框架蛛勉。首先鹿寻,它是一個框...
    強哥科技興閱讀 1,253評論 0 1
  • VUE介紹 Vue的特點構(gòu)建用戶界面,只關(guān)注View層簡單易學诽凌,簡潔毡熏、輕量、快速漸進式框架 框架VS庫庫侣诵,是一封裝...
    多多醬_DuoDuo_閱讀 2,692評論 1 17
  • 前言 使用Vue在日常開發(fā)中會頻繁接觸和使用生命周期,在官方文檔中是這么解釋生命周期的: 每個 Vue 實例在被創(chuàng)...
    心_c2a2閱讀 2,238評論 1 8
  • 組件(Component)是Vue.js最核心的功能痢法,也是整個架構(gòu)設(shè)計最精彩的地方恬试,當然也是最難掌握的。...
    六個周閱讀 5,587評論 0 32