珠峰培训

vue.js系列教程二

作者:wy

2016-06-30 18:26:49

136

Vue的实例

  • 一个 Vue 实例其实正是一个 MVVM 模式中所描述的 ViewModel
  • 属性
  •         
        var message = {hello:1};
        var vm = new Vue({
        el:'##app',
        data:{
        message:message
        }
        });
        alert(vm.message === message);
            
        

    当实例创建后给实例增加属性,不会导致视图的刷新

Vue通过$暴露实例上的属性和方法

        
    - $el
    ```
    vm.$el==document.getElementById('app')
    ```
    - $data
    ```
    vm.$data==message
    ```
    - $watch
    ```
    vm.$watch('message',function(newVal,oldVal){})
    ```
        
    

实例的生命周期

  • Vue 实例在创建时有一系列初始化步骤 image
    • 1.created 先实例化,在实例化后(检测el)
    • 2.vm.$mount('##app'); 手动挂载实例
    • 3.beforeCompile 开始编译之前
    • 4.compiled 编译完成后
    • 5.ready 插入文档后
    • 6.vm.$destroy(); 手动销毁实例
    • 7.beforeDestroy 将要销毁
    • 8.destroyed 销毁实例

##实例的生命周期

        
    var vm = new Vue({
    data:{
    hello:123
    },
    created: function () {alert('实例创建完成');},
    beforeCompile: function () {alert('开始编译前')},
    compiled: function () {alert('编译完成')},
    ready: function () {alert('准备好了')},
    beforeDestroy: function () {alert('准备销毁')},
    destroyed: function () {alert("销毁")}
    });
    vm.$mount('##app');
    vm.$destroy();
         
   

计算属性

computed计算属性值

    
    {{c}}
    computed:{
    c: function () {
    return this.hello+345
    }
    }
    

计算属性

set和get方法

    
    computed:{
    b:{
    set: function (v) {
    this.hello = v;
    },
    get: function () {
    return this.hello-100;
    }
    }
    }
    vm.b = 100;
    

当前this表示data的属性值

解决闪烁问题

v-text

    
    <div v-text="hello"></div>
    

v-cloak

    
    //引入css
    [v-cloak] {display: none;}
    <div v-cloak>{{hello}}</div>
    

v-if/v-show

v-if 在不符合条件时,移除dom

    
    <div v-if="false">{{hello}}</div>
    <div v-else>{{world}}</div>
    

v-if <template>

    
    <template  v-if="true">
    <div>{{hello}}</div>
    <div>{{hello}}</div>
    <div>{{hello}}</div>
    </template>
    <div v-else>{{he}}</div>
    

v-show 通过display CSS属性切换

    
    <div v-show="false">{{hello}}</div>
    <div v-else>{{world}}</div>
    

v-show 不支持 <template> 语法

v-else

v-else 元素必须立即跟在 v-if 或 v-show 元素的后面——否则它不能被识别;

一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好

v-for数据遍历

基于源数据将元素或模版块重复

    
    <li v-for="data in datas ">
    {{data.name}}
    </li>
    

遍历对象

    
    <li v-for="l in list ">
    {{$key}}
    <!--$key当前键-->
    </li>
    

嵌套循环

    
    <li v-for="(index,value) in datas">
    <span v-for="va in value.name">
    {{index}}
    {{$index}}
    <!--$index当前索引-->
    </span>
    </li>
    

v-for的track-by

如果没有唯一的键供追踪,可以使用:

    
    track-by="$index"
    

v-bind

绑定图片属性

    
    <img v-bind:src="imageSrc">
    

绑定图片属性

    
    <a v-bind:href="aHref">

简写

    
    <a :href="aHref">
        
    
不要使用{{aHref}}进行设置链接

v-on

绑定事件

    
    <div v-on:click = 'dosome'>123</div>
    <!--简写-->
    <div @click = 'dosome'>123</div>
        
    
    
    methods:{
    dosome: function (e) {
    console.log(e); //e是事件源
    }
    }
        
    

绑定事件传递参数

    
    <!--当传递参数时,手动调用$event参数-->
    <div @click = 'dosome("1",$event)'>123</div>
    methods:{
    dosome: function (a,e) {
    console.log(a,e); //e是事件源
    }
    }
    

v-on中的修饰符

阻止事件冒泡.stop

    
    <div @click="dosome">
    123
    <div>456</div>
    </div>
        
    

阻止默认事件 .prevent

    
    <a href="http://www.baidu.com" @click.prevent>123</a>
    

自己触发事件 .self

    
    <div v-on:click.self="dosome">
    123
    <div>456</div>
    </div>
    
       

v-on中的按键修饰符

按键修饰符号

    
    <input v-on:keyup.13="dosome">
    或
    <input type="text" @keyup.enter="dosome">
    

enter tab delete esc space up down left right

自定义按键 Vue.directive('on').keyCodes.A = 65