vue.js

vue2.0基本用法

(npm run dev)

和angular有許多類似的地方伏伐,由于使用了大量ES6語(yǔ)法,所以不支持IE8以下版本

一晕拆、基本語(yǔ)法

vue實(shí)例最外層放一個(gè)<div id="app"></div>

1.{{}}:同angular一樣藐翎,使用{{}}包裹變量

<h1>{{ name }}</h1>

同樣,和angular一樣实幕,可以在{{}}里面寫(xiě)表達(dá)式吝镣,{{1+1}}{{Math.random()>0.5}}{{‘a(chǎn)bc’.toUpperCase()}}{{ 10>30?30:60 }},注意,這里不能寫(xiě)if()else

2.v-model
和angular的ng-model類似昆庇,實(shí)現(xiàn)數(shù)據(jù)的雙向綁定

<h1>{{ name }}</h1>
<input type="text" v-model="name" />

使用name變量之前末贾,要先定義
創(chuàng)建模板對(duì)應(yīng)的vue實(shí)例
var vm=new Vue({
    el:'#app',//el:elements Vue對(duì)應(yīng)的根標(biāo)簽
    data:{//對(duì)應(yīng)的數(shù)據(jù)
        name:'小明'
    }
})

在data中可以定義變量數(shù)組對(duì)象字符串

3遍歷v-for(in/of)
不僅可以遍歷數(shù)組元素,還可以遍歷數(shù)組下標(biāo)

    <ul>
        <li v-for="(person,i) of people">{{i+person.name}}</li>
    </ul>

var vm=new Vue({
    el:'#app',
    data:{
       people:[
          {name:'xiaoming'},
          {name:'xiaohong'},
        ]
    }
})

使用v-for遍歷對(duì)象的value整吆;

<li v-for="value in mine">{{value}}</li>

var vm=new Vue({
    el:'#app',
    data:{
       mine:{
          name:'xiaoming',
          age:18
        }
    }
})

v-for可以遍歷對(duì)象的value和key值拱撵,注意value在前,key在后

<li v-for="(value,key) in mine">{{value}}{{key}}</li>

4.點(diǎn)擊事件v-on:click="change"
無(wú)論使用什么事件表蝙,都是用v-on指令拴测,后面跟事件名稱即可,可以不加()在不傳參的情況下

<h3 v-on:click="show">點(diǎn)擊顯示</h3>

定義函數(shù)時(shí),要使用methods
var vm=new Vue({
    methods:{
        show:function(){
            console.log(event);
        }
        //可以簡(jiǎn)寫(xiě)成一下的形式ES6新語(yǔ)法
        show(){
            console.log(event)
        }
    }
})

如果想要得到里面的變量府蛇,可以直接寫(xiě)vm.變量名集索,如vm.show或vm.name;

5.v-if決定是否渲染,可以和v-else連用

<section v-if="flag">hhhh</section>
<section v-else>lksdjfkaldj</section>

6.v-show決定是否顯示

<div v-show="flag">h2</div>

7.v-on添加事件

<button v-on:click="test1">按鈕1</button>

可以簡(jiǎn)寫(xiě)成@
<button @click="test1">按鈕1</button>

還可以寫(xiě)其他的事件
<button @mouseover="test2">按鈕2</button>
<input type="text" @keyup='test3' />
等等

還可以添加修飾符,針對(duì)某一個(gè)按鍵起作用
<input type="text" @keyup.enter='test3' />
只用在點(diǎn)擊enter鍵時(shí),才會(huì)執(zhí)行函數(shù)抄谐,注意渺鹦,這樣的針對(duì)某一個(gè)按鍵起作用,就必須綁定在鍵盤(pán)事件上
<input type="text" @keyup.up='test3' />上下鍵的上

同樣也可以取消默認(rèn)事件
<a  @click.prevent="test4">baidu</a>

還可以取消冒泡
<a  @click.stop="test4">baidu</a>

說(shuō)到這里蛹含,可以復(fù)習(xí)一下原生的取消默認(rèn)事件的方法毅厚,和取消冒泡的方法

event.stopPropagation取消冒泡事件
event.preventDefault;取消默認(rèn)事件

8.v-bind綁定屬性

<h2 v-bind:class="class"></h2>

同樣可以簡(jiǎn)寫(xiě)成
<h2 :class="class"></h2>

不光可以寫(xiě)class,其他的屬性都可以這樣寫(xiě)浦箱,
在使用v-bind簡(jiǎn)寫(xiě)形式時(shí)吸耿,
必須加冒號(hào),不然會(huì)把它里面的值當(dāng)成一個(gè)字符串顯示酷窥,而不是我們要的變量得形式

9.計(jì)算屬性computed;

<h2>{{ aDouble }}</h2>
<h2>{{ aPlus }}</h2>
<input type="number" v-model="aPlus">

    var vm=new Vue({
        el:'#app',
        data:{
            a:10,
        },
        computed:{//計(jì)算屬性
            aDouble:function(){
                return this.a*2;//這里的this.a==vm.a;
            },
            aPlus:{
                get:function(){
                    return this.a*2;
                },
                set:function(newValue){
                    console.log(newValue);
                    if(newValue>100){
                        this.a=100;
                    }else if(newValue<=0){
                        this.a=0;
                    }else{
                        this.a=newValue;
                    }
                }
            }
        }
    })

計(jì)算屬性可以內(nèi)部編寫(xiě)兩個(gè)函數(shù)咽安,分別是get和set,讀取計(jì)算屬性的時(shí)候走get方法蓬推,設(shè)置計(jì)算屬性值得時(shí)候妆棒,就走set方法,set方法中的參數(shù)就是要設(shè)置的新值沸伏,可以再get方法內(nèi)部進(jìn)行條件判斷糕珊,決定是否使用其新值

對(duì)于計(jì)算屬性,直接當(dāng)成普通屬性使用即可
不能加括號(hào)作為函數(shù)使用 毅糟,他代表一個(gè)函數(shù)的返回值
如果把它寫(xiě)在methods里面红选,那么他就是一個(gè)函數(shù)的方法

計(jì)算屬性實(shí)現(xiàn)的效果,使用函數(shù)也都可以實(shí)現(xiàn)姆另,喇肋,但是盡量使用計(jì)算屬性,計(jì)算屬性更加加高效迹辐,對(duì)于取值來(lái)說(shuō)蝶防,只有當(dāng)值發(fā)生改變,計(jì)算屬性內(nèi)部的函數(shù)才會(huì)執(zhí)行一次明吩,而函數(shù)會(huì)使用幾次就執(zhí)行幾次

9.實(shí)例屬性
vm.$data
vm.$el
vm.$parent
vm.$root
vm.$children
在路由分級(jí)時(shí)慧脱,會(huì)用到children

10.實(shí)例方法vm.$watch
同angular,

    // 使用$watch可以監(jiān)測(cè)某個(gè)值得變化
    vm.$watch('a',function(newValue,oldValue){
        console.log("newValue="+newValue);
        console.log("oldValue="+oldValue);
    })
返回一個(gè)函數(shù)贺喝,用來(lái)停止觸發(fā)回調(diào)
var unwatch = vm.$watch(‘a(chǎn)’, cb);
unwatch();

二、組件

類似于angular的自定義指令宗兼,用來(lái)封裝重復(fù)使用的代碼塊

注冊(cè)組件

如果需要換行躏鱼,可以使用普通字符串,后面用\拼接殷绍,或者使用模板字符串
Vue.component('hello',{
        template:'<div>\
                        <h1>我是hello</h1>\
                        <p>我是HELLO標(biāo)簽</p>\
                        <p>我是HELLO標(biāo)簽{{msg}}</p>\
                    </div>',
        data(){//組件中的data數(shù)據(jù)染苛,必須是函數(shù),數(shù)據(jù)通過(guò)return進(jìn)行返回


            // 組件中的data必須是函數(shù)的原因是:每個(gè)組件歐擁有自己獨(dú)立的數(shù)據(jù),不與其他共享茶行,因?yàn)楣蚕頂?shù)據(jù)后躯概,會(huì)相互影響,導(dǎo)致數(shù)據(jù)錯(cuò)亂
            return {
                msg:'message'
            };
        }
    })

在html代碼中畔师,只需要加入<hello></hello>就可以了

這是一個(gè)全局的標(biāo)簽
其中template對(duì)應(yīng)的是被替換過(guò)去的HTMl模板結(jié)構(gòu)娶靡;
必須存在一個(gè)跟標(biāo)簽(root element)

下面創(chuàng)建一個(gè)局部的實(shí)例

    var vm=new Vue({
        el:'#app',
        components:{//局部組件直接寫(xiě)在實(shí)例的components中,其他實(shí)例無(wú)法使用看锉。
            hi:{
                template:'<h2>我是hi標(biāo)簽</h2>'
            }
        }
    })

父組件與子組件的傳值props

在這里需要提一下引用類型姿锭;
數(shù)組和對(duì)象都是引用類型,其他的都是普通的值類型

var arr=[1,2,3,4];
var arr2=arr;
arr2.push(5);
此時(shí)arr與arr2同時(shí)都變成了[1,2,3,4,5];
這是因?yàn)閍rr定義一個(gè)數(shù)組伯铣,就會(huì)開(kāi)創(chuàng)一個(gè)空間呻此,并把值都傳到空間,然后arr指向了這個(gè)空間腔寡,定義一個(gè)arr2,讓他等于arr焚鲜,這時(shí)arr2也指向了這個(gè)空間,所以通過(guò)這兩個(gè)隨意改變指都會(huì)影響到另一個(gè)放前,這樣的數(shù)組就是引用型忿磅。此僅為個(gè)人理解。

組件內(nèi)部的props里面的值都是組件的屬性犀斋,用于接受外界的值贝乎,然后賦值到組件內(nèi)部

<my-component :msg="msg"></my-component>

    Vue.component('my-component',{
        props:['msg'],//props用于接受外界傳遞的值
        template:'<p>message={{msg}}</p>'
    })
 父組件與子組件之間的傳值
<my-component :msg="msg"></my-component>
這里的msg是一個(gè)變量

    Vue.component('my-component',{
        props:['msg'],//props用于接受外界傳遞的值
        template:'<p>message={{msg}}</p>'
    })
    var vm=new Vue({
        el:'#app',
        data:{
            msg:'message'
        }
    })

在頁(yè)面顯示的<p>message=message</p>

這里的props是單向數(shù)據(jù)流的,但是對(duì)于引用類型的數(shù)組對(duì)象不能單向叽粹;

使用slot分發(fā)
作用類似于angular的ng-transclude嵌套元素览效;

    Vue.component('my-app',{
        template:`
                <div>
                    <p>我是my-app</p>
                    <slot>如果沒(méi)有分發(fā)內(nèi)容,顯示我</slot>
                    <slot name="header">如果沒(méi)有分發(fā)內(nèi)容虫几,顯示我</slot>

                </div>`
        
    })


具名slot的使用
        <my-app>
            <h2 slot="header">h2</h2>
            <hr>
            <h3 slot="footer">h3</h3>
            <hr>
            <h4>h4</h4>
        
        </my-app>

如果寫(xiě)兩遍slot锤灿,那么就會(huì)打印兩遍,但會(huì)報(bào)錯(cuò);但是辆脸,如果把他變成具名屬性但校,就可以正常使用了

// export導(dǎo)出
// import導(dǎo)入

三、使用vue做一個(gè)項(xiàng)目

命令行內(nèi):
1.通過(guò)命令行安裝vue腳手架
npm install -g vue-cli

2設(shè)置項(xiàng)目名稱
vue init webpack 項(xiàng)目名

cd 項(xiàng)目名

npm install

npm run dev運(yùn)行項(xiàng)目默認(rèn)打開(kāi)8080端口

路由

路由安裝
npm install vue-router

npm run dev

完成之后進(jìn)行的步驟:
在main.js中

1.import VueRouter from 'vue-router'//引入路由文件

引入home

import Home from 'home'

//2.安裝插件main.js

Vue.use(VueRouter)

3.編寫(xiě)頁(yè)面在app.js

 <router-link to="/home"></router-link>

4.定義路由main.js

const routes=[
    {path:'/home',component:Home}
    path對(duì)應(yīng)的是app.js 中to="/home"
    components對(duì)應(yīng)的是引入的名稱
]

其中的

const routes=[
    { path: '/', component: Home }
      表示打開(kāi)默認(rèn)顯示home頁(yè)面
]

5創(chuàng)建VueRouter實(shí)例main.js

const router = new VueRouter({
    routes//這是簡(jiǎn)寫(xiě)(routes:routes)
})

6.在main.js中的

new Vue({
  el: '#app',
  template: '<App/>',
  components: { App },
添加:
  router
})

添加一個(gè)文件夾在src文件夾下啡氢,里面添加我們需要的頁(yè)面状囱,每個(gè)頁(yè)面只需要一個(gè)后綴名為vue的文件,里面就包含了html倘是,css和js的所有內(nèi)容亭枷。其中html寫(xiě)在<template></template>內(nèi),并且在里面添加一個(gè)根標(biāo)簽搀崭,把內(nèi)容都放在我們?cè)O(shè)置的跟標(biāo)簽里面

和angular不同的是叨粘,路由跳轉(zhuǎn)沒(méi)有直接使用a標(biāo)簽的錨點(diǎn),而是有它專用的標(biāo)簽
<router-link to="/home">首頁(yè)</router-link>
,同樣升敲,也不需要使用ui-view,而是它專用的
<router-view></router-view>

replace屬性

<router-link :to="/home" replace></router-link>//頁(yè)面切換不會(huì)留下歷史痕跡

tag屬性,會(huì)渲染成tag指定的標(biāo)簽

<router-link :to="/home" tag="li">Home</router-link><li>Home</li>

active-class屬性
這個(gè)屬性是設(shè)置激活鏈接時(shí)的class屬性

<router-link :to="/home" active-class="active">Home</router-link>

active-class屬性的默認(rèn)值是router-link-active

exact屬性
開(kāi)啟router-link的嚴(yán)格模式

<router-link :to="/" exact>home</router-link>

二級(jí)路由

先引入
import One from 'one',
import two from 'two',

const router=[
    {path:'/home',component:Home,children:[
        {path:'one',component:One},
        {path:'two',component:two},
    ]}
]

 <router-link to="/home/one">One</router-link>
<router-view></router-view>

網(wǎng)絡(luò)請(qǐng)求
npm install vue-resource
安裝

Vue.use(VueResource)


export default{
    data(){
        return {
            data:[]//把返回的數(shù)據(jù)都放到數(shù)組中
        }
    },
    mounted(){
        this.$http.get().then(function(res){
            console.log(res);
            // console.log(JSON.parse(res.body).data);
            this.data=JSON.parse(res.body).data;
        })
    }
}

網(wǎng)絡(luò)請(qǐng)求使用mounted

引用第三方j(luò)s庫(kù):

在需要的.vue文件中答倡,script里面引入;
import $ from '../../static/lib/jquery-3.1.1.min.js'

就這么簡(jiǎn)單

export default{
    data(){
        return (
            //定義的變量寫(xiě)這里
            data:[];
            name:'xiaoming'
        )
    },
    mounted(){
        //js代碼寫(xiě)在這里
       在引用swiper時(shí)驴党,把swiper的js代碼放到這里瘪撇,如果是動(dòng)態(tài)創(chuàng)建的元素,
       建議用setTimeout包住
           new Swiper ('.swiper-container', {
                direction: 'horizontal',
                loop: true,
                autoplay:2000,
                speed:1000,
                autoplayDisableOnInteraction:false,
                pagination: '.swiper-pagination',
            })
    }鼻弧,
    methods:{//方法寫(xiě)這里
        get(){}
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末设江,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子攘轩,更是在濱河造成了極大的恐慌叉存,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件度帮,死亡現(xiàn)場(chǎng)離奇詭異歼捏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)笨篷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)瞳秽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人率翅,你說(shuō)我怎么就攤上這事练俐。” “怎么了冕臭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵腺晾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我辜贵,道長(zhǎng)悯蝉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任托慨,我火速辦了婚禮鼻由,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厚棵。我一直安慰自己蕉世,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布婆硬。 她就那樣靜靜地躺著讨彼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柿祈。 梳的紋絲不亂的頭發(fā)上羞酗,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天券盅,我揣著相機(jī)與錄音,去河邊找鬼。 笑死孙蒙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的房揭。 我是一名探鬼主播栋豫,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼虚茶!你這毒婦竟也來(lái)了戈鲁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嘹叫,失蹤者是張志新(化名)和其女友劉穎婆殿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體罩扇,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婆芦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喂饥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片消约。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖员帮,靈堂內(nèi)的尸體忽然破棺而出或粮,到底是詐尸還是另有隱情,我是刑警寧澤捞高,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布氯材,位于F島的核電站,受9級(jí)特大地震影響棠枉,放射性物質(zhì)發(fā)生泄漏浓体。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一辈讶、第九天 我趴在偏房一處隱蔽的房頂上張望命浴。 院中可真熱鬧,春花似錦贱除、人聲如沸生闲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碍讯。三九已至,卻和暖如春扯躺,著一層夾襖步出監(jiān)牢的瞬間捉兴,已是汗流浹背蝎困。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倍啥,地道東北人禾乘。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像虽缕,于是被迫代替她去往敵國(guó)和親始藕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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