vue路由梦抢、自定義指令、腳手架

*Vue

vue-router

一愧哟、路由

一奥吩、導(dǎo)航式路由

路由路徑由 <router-link></router-link>標簽配置 標簽內(nèi) to屬性值規(guī)定改標簽指向的path路徑哼蛆;

路由對應(yīng)視圖 通過加載組件 加載到<router-view></router-view>上

<router-link to="/home">去首頁</router-link>
<router-link to=“/news”>去新聞</router-link>

配置路由的步驟:

1)定義組件--(試圖加載的內(nèi)容組件)Eg:var Home={ template:'<div>這是一個首頁的頁面</div>'}

2)配置路由 定義路由

Path 屬性 配置路由地址 “*”默認路徑下 redirect 屬性配置路由重定向 component 屬性 配置改地址需要加載的組件視圖

3)實例化VueRouter

var router=new VueRouter({ /router 老老實實的寫這個名字/

? routes:routes

    /*VueRouter里面的屬性名稱不能變  routes  */ 

})

4)VueRouter掛載到Vue實例上面去var app=new Vue({ router:router, el:'#out' })

<!-- 導(dǎo)航式路由 -->
    <div id="box">
        <h1>導(dǎo)航式路由</h1>
        <!-- 路由標簽 -->
        <router-link to="/index">首頁</router-link>
        <router-link to="/about">關(guān)于</router-link>
        <router-link to="/other">其他</router-link>
        <!-- 路由容器 -->
        <router-view></router-view>
    </div>
    <!-- 試圖組件 -->
    <template id="index">
        <div>
            <h1>index</h1>
        </div>
    </template>
    <template id="about">
        <div>
            <h1>about</h1>
        </div>
    </template>
    <template id="other">
        <div>
            <h1>other</h1>
        </div>
    </template>
    <template id="error">
            <div>
                <h1>404Not Found</h1>
            </div>
        </template>
——————————————————————————————————————————————————————————————
    //組件對象
    var Index ={
        template:"#index"
    }
    var About ={
        template:"#about"
    }
    var Other ={
        template:"#other"
    }
    var Err ={
        template:"#error"
    }
    // 路由規(guī)則
    var routes=[
        {path:"/index",component:Index},
        {path:"/about",component:About},
        {path:"/other",component:Other},
        {path:"/",redirect:'/index'},
        {path:"/error",component:Err},
        {path:"*",redirect:'/error'}
    ]
    //創(chuàng)建路由對象
    var router=new VueRouter({
        routes:routes
    })
     var vm = new Vue({
            el:'#box',
            router:router
        })
——————————————————
導(dǎo)航樣式
.router-link-active{
            color:red;
        }
二、編程式路由

事件中路由路徑跳轉(zhuǎn)————router.push('/other')

var Index ={
        template:"#index",
        methods:{
            tap(){
                router.push('/other')
            }
        }
    }

導(dǎo)航標簽會默認轉(zhuǎn)換成a標簽霞赫;可以用tag="div"轉(zhuǎn)換成其他標簽

  <router-link to="/index" tag="span">首頁</router-link>
三腮介、路由的傳參
1、params——傳單個參數(shù)

存儲路徑參數(shù) path:“/index/:id”

獲取 this.$route.params.id

 <li v-for="item in arr">
        <router-link :to="'/detail/'+item.pid">{{item.pname}}</router-link>
 </li>
 //創(chuàng)建組件
 <template id="detail">
            <div>
                <h1>詳情</h1>
                <p>{{str}}</p>
            </div>
 </template>
 //路由規(guī)則
  {path:"/detail/:id",component:Detail},
  // 組件對象 
   var About ={
        template:"#about",
        data:function(){
            return{
                arr:[]
            }
        },
        mounted(){
            
            var _this=this;
            axios({
                url:"http://jx.xuzhixiang.top/ap/api/productlist.php"
            }).then(function(data){
                _this.arr=data.data.data
            })
        }
    }
  var Detail ={
        template:"#detail",
        data:function(){
                return{
                    str:''
                }
            },
        mounted(){
            //console.log(this.$route.params.id)
            var _this=this;
            axios({
                url:"http://jx.xuzhixiang.top/ap/api/detail.php",
                params:{id:_this.$route.params.id}
            }).then(function(data){
                // console.log(data)
                _this.str=data.data.data.pname
            })
        }
    }
2端衰、query——可以傳多個叠洗,以對象形式

query傳參,只能在命名路由中實現(xiàn)

傳參:
<li v-for="item in arr">
            <router-link :to="{name:'detail',query:{id:item.pid}}">{{item.pname}}</router-link>
    </li>
規(guī)則配置
{path:"/home",component:Home,
            children:[
                {path:"/detail",name:'detail',component:Detail}
            ]
 },
 query傳參旅东,規(guī)則中不做任何參數(shù)的保留
 
 接收參數(shù):
 mounted(){
            var _this=this;
            axios({
                url:"http://jx.xuzhixiang.top/ap/api/detail.php",
                params:{
                    id:_this.$route.query.id
                }
            }).then(function(data){
                _this.str=data.data.data.pname
            })
        },
四灭抑、嵌套路由
1)父級路由
<router-link to="/home">首頁</router-link>
<router-link to=“/user”>用戶</router-link>
<router-view></router-view>

子路由

<template id="user">
        <div>
            <router-link to="user/username">去子路由</router-link>      
        <!--子路由視圖顯示的地方-->    
        <router-view></router-view>   
        </div>
</template>
2)配置路由 定義路由

子路由配置

    {path:'/user',component:User,
            'children':[
                 /定義自組件的路由/ 
                { path:'username',component:UserName, }  /注意:子路由前面的斜杠/           
        ]   
   } ,
   其他步驟一樣

注意:在嵌套路由的時候,需要監(jiān)聽抵代,視圖切換通過watch檢測路由參數(shù)更改

watch:{
'$route'(to,from){

    }
}

路徑:

? 相對路徑:不加 / 繼承父級的路徑

? 絕對路徑:/detail

3腾节、嵌套路由代碼示范
 <div id="box">
        <h1>嵌套路由</h1>
        <router-link to="/home">home</router-link>
        <router-link to="/about">about</router-link>   

        <!-- 容器 -->
        <router-view></router-view>
    </div>

    <template id='home'>
        <div>
            <h1>home</h1>
            <ul>
                <li v-for="item in arr"><router-link :to="'/detail/'+item.pid">{{item.pname}}</router-link></li>
            </ul>
            <router-view></router-view>
        </div>
    </template>
    <template id='about'>
        <div>
            <h1>about</h1>
        </div>     
    </template>
    <template id='detail'>
        <div>
            <h1>詳情</h1>
            <p>{{str}}</p>
        </div>     
    </template>
————————————————————————————————————————————————————————————————————————
    var Home={
        template:"#home",
        data:function(){
            return{
                arr:[]
            }
        },
        mounted(){
            var _this=this;
            axios({
                url:"http://jx.xuzhixiang.top/ap/api/productlist.php"
            }).then(function(data){
                _this.arr=data.data.data
            })
        }
    }
    var About={
        template:"#about"
    }
    var Detail={
        template:"#detail",
        data:function(){
            return{
                str:''
            }
        },
        mounted(){
            var _this=this;
            axios({
                url:"http://jx.xuzhixiang.top/ap/api/detail.php",
                params:{
                    id:_this.$route.params.id
                }
            }).then(function(data){
                _this.str=data.data.data.pname
            })
        },
        watch:{
            '$route':function(a){
                var _this=this;
                axios({
                    url:"http://jx.xuzhixiang.top/ap/api/detail.php",
                    params:{
                        id:a.params.id
                    }
                }).then(function(data){
                    _this.str=data.data.data.pname
                })
            }
        }
    }

    var routes=[
        {path:"/home",component:Home,
            children:[
                {path:"/detail/:id",component:Detail}
            ]
        },
        {path:"/about",component:About},
        
        {path:"/",redirect:"/home"}
    ]
    var router=new VueRouter({
        routes:routes
    })

    var vm = new Vue({
        el:'#box',
        router:router
    })
五、命名路由

路徑的另一種定義方式 綁定屬性to 對象 name的值為設(shè)置的路由路徑

對比:
<router-link to="/home">home</router-link>
<router-link :to="{name:'hello'}">about</router-link>

name屬性設(shè)置路由視圖名字--無名字默認default

下方路由規(guī)則里配置:

 對比:
 {path:"/home",component:Home}                      //這里的path必須與to的值一致
 {path:"/aaa",name:'hello',component:About},//這里的path里可以任意寫

一個頁面加載多個視圖

{path:'/index',name:'index',    components:{default:index,page:about}},
<router-view></router-view>
<router-view name="other"></router-view>
通過名字匹配加載的容器

{path:"/index",components:{
            default:Index,
            'other':Other
            }
        },
六荤牍、路由 +動畫
Transition標簽包含 router-view標簽即可

<transition
            enter-active-class="animated bounceInLeft"
            leave-active-class="animated bounceOutRight"
        >
            <router-view></router-view>  
</transition>
七禀倔、路由的鉤子函數(shù)
beforeRouteEnter(to,from,next){  next( )  } 路由進入鉤子函數(shù) next()方法調(diào)用才會觸發(fā)路由切換
beforeRouteUpdate(to,from,next) 路由更新鉤子函數(shù)
beforeRouteLeave(to,from,next) 路由離開鉤子函數(shù)

二、自定義指令

1参淫、兩種:全局救湖、私有;
全局:
Vue.directive('color',{
        inserted:function(a涎才,b){    /*這個元素插入父元素的時候執(zhí)行的操作*/
          a.style.color='blue';  
        }
    })
私有:
var vm = new Vue({
         el:"#box",
         directives:{
             'bac':{
                inserted:function(a,b){
                 a.style.background='yellow'
             }
             }
            
         }
     }) 

a就指的是獲取到的dom節(jié)點(下圖中的el)鞋既;參數(shù)b是一個對象(下圖中的binding),屬性如下:

[圖片上傳失敗...(image-d752f8-1540860357631)]

value:可以解析變量耍铜,進行業(yè)務(wù)邏輯的處理邑闺;

expression: 只能以字符串輸出;

注意:自定義命令可以綁定實例化對象里的任意變量棕兼;

舉例:
<p v-color="str">lorem</p> 
 data:{
             str:"hello"
         },
 打印結(jié)果:
expression:str
value:hello

arg:給指令傳參:

傳參方式:  <p v-color:str>lorem</p> 
取參值:  b.reg   結(jié)果是  str
只能傳字符串常量陡舅;想當成變量解析,只能以綁定值得形式伴挚;

modifiers:修飾符:以 . 的形式鏈式的寫法靶衍,返回鍵值對:案例如圖;

2茎芋、鉤子函數(shù):

bind: 只調(diào)用一次颅眶,指令第一次綁定到元素時調(diào)用,用這個鉤子函數(shù)可以定義一個在綁定時執(zhí)行一次的初始化動作田弥;

inserted: 被綁定元素插入父節(jié)點時調(diào)用涛酗。(bind與該生命周期鉤子函數(shù)作用十分類似)

update: 被綁定元素所在的模板更新時調(diào)用,而不論綁定值是否變化。通過比較更新前后的綁定值商叹,可以忽略不必要的模板更新燕刻。

componentUpdated: 被綁定元素所在模板完成一次更新周期時調(diào)用。

3剖笙、簡寫形式
正常形式:
directives:{
             'bac':{
                inserted:function(a){
                 a.style.background='yellow'
                },
                update:function(a){
                 a.style.background='blue'
                },
             }
         }
簡寫形式
directives:{
    /*簡寫 表示bind 和update的時候都會執(zhí)行*/
     'color':function(el,binding){   
         el.style.color=binding.value;
             }
 }

實例:拖拽卵洗;

 <div id="wrap">
        <p class="box" v-move></p>
        <p class="box"  v-move></p>
        <p class="box"  v-move></p>
        <p class="box"  v-move></p>
 </div>
————————————————————————————————————————————————————————
    var vm = new Vue({
        el:"#wrap",
        directives:{
            'move':function(a,b){
                a.onmousedown=function(e){
                    var x = e.clientX - a.offsetLeft;
                    var y = e.clientY - a.offsetTop;
                    document.onmousemove=function(e){
                         a.style.left = e.clientX - x +"px";
                        a.style.top = e.clientY - y +"px";
                    }
                    document.onmouseup=function(e){
                        document.onmousedown=null;
                        document.onmousemove=null;
                    }
                };               
            }
        }
    })

三、腳手架

1枯途、安裝腳手架(全局安裝忌怎,只需一次)
npm install vue-cli -g
2籍滴、項目構(gòu)建

官方模版 vue init webpack my-project (tips:代碼語法檢查較麻煩)

推薦 vue init webpack-simple my-project (適合開發(fā)經(jīng)驗豐富者)

根據(jù)提示 進行依賴安裝

? 項目啟動 npm run dev

項目打包 npm run build

單文件組件 css擁有作用域酪夷,

scoped屬性可規(guī)定當前css只作用于自己的組件,不影響其他

3孽惰、插件安裝

1晚岭、插件安裝 axios : npm install axios —-save-dev

哪個文件需要使用,就在該文件的js中 導(dǎo)入 import axios from ‘a(chǎn)xios’

2勋功、路由 vue-router (tips:路由規(guī)則配置均在main.js中)

依賴安裝 nam install vue-router —-save-dev使用

在main.js引入 import VueRouter from ‘vue-router’

聲明使用 在main.js 中 Vue.use(VueRouter)

3坦报、Vue ui框架Element --pc (算是目前支持vue2.0最好的ui框架)

npm i element-ui -s

Mintui ---基于Vue的移動端ui框架 Vue.use(MintUi)

Vux

Framework7Tips;

vue全家桶 指(vue + vuex + vue-router + axios)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狂鞋,一起剝皮案震驚了整個濱河市片择,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骚揍,老刑警劉巖字管,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異信不,居然都是意外死亡嘲叔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門抽活,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硫戈,“玉大人,你說我怎么就攤上這事下硕《∈牛” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵梭姓,是天一觀的道長果港。 經(jīng)常有香客問我,道長糊昙,這世上最難降的妖魔是什么辛掠? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上萝衩,老公的妹妹穿的比我還像新娘回挽。我一直安慰自己,他們只是感情好猩谊,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布千劈。 她就那樣靜靜地躺著,像睡著了一般牌捷。 火紅的嫁衣襯著肌膚如雪墙牌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天暗甥,我揣著相機與錄音喜滨,去河邊找鬼。 笑死撤防,一個胖子當著我的面吹牛虽风,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寄月,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼辜膝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漾肮?” 一聲冷哼從身側(cè)響起厂抖,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎克懊,沒想到半個月后忱辅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡保檐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年耕蝉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夜只。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡垒在,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扔亥,到底是詐尸還是另有隱情场躯,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布旅挤,位于F島的核電站踢关,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粘茄。R本人自食惡果不足惜签舞,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一秕脓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧儒搭,春花似錦吠架、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至魂仍,卻和暖如春拐辽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背擦酌。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工俱诸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仑氛。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓礼搁,卻偏偏與公主長得像按摘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子仪芒,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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

  • 你我都是這陌生星球的 陌生訪客 有一種生活 叫漂泊 沒有什么 永久的彼岸 也無所謂 該完成的功課 注定的恩典 永不...
    阿桂愛原創(chuàng)閱讀 309評論 25 63
  • 不知不覺一年又過去了事情經(jīng)歷得不算少甫何,但卻還是 像一個笨小孩一樣長不大 以后還很長 ??? ...
    R黃豆豆閱讀 300評論 0 0
  • 因為業(yè)務(wù)需求出吹,要在app里集成激勵視頻,類似游戲app內(nèi)的觀看視頻獎勵鉆石的辙喂。本文就介紹了兩種激勵視頻捶牢,谷歌激勵視...
    子書不言閱讀 2,814評論 0 1