2017-3-29 VUE

指令归纳总结

1、v-if :可以完全根据表达式的值在DOM中生成或者移除一个元素。如果v-if表达式赋值为false,对应的元素就会从DOM中移除。如果需要切换多个元素,把<template>元素当作包装元素,并使用v-if,最终的渲染结果不会包含它。

<div id="example">
        <template v-if="ok">
            <h1>A</h1>
            <p>B</p>
            <p>C</p>
        </template>
    </div>
    <script>
    var exampleVM2 = new Vue ({
        el:'#example',
        data: {
            ok:true
        }
    })
    </script>

2、v-show :根据表达式的值来显示或者隐藏HTML元素。当v-show赋值为false时,元素将被隐藏,并且元素增加一个内联样式style="display:none"。v-show不支持<template>语法。

<input type="text" name="" v-model="message" placeholder="edit me">
    <div id="example">
        <p v-show="ok">HEllo</p>
    </div>
    <script>
        var exampleVM2 = new Vue({
            el:'#example',
            data: {
                ok:false
            }
        })
    </script>

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

3、v-else:必须跟着v-if或者v-show,充当else功能。

<div id="example">
        <p v-if="ok">yes</p>
        <p v-else="ok">no</p>
    </div>
    <script>
        var exampleVM2 = new Vue ({
            el:'#example',
            data: {
                ok:'false'
            }
        })
    </script>

4、v-model:用来在input、select、text、checkbox
、radio等表单控件元素上创建双向数据绑定。

<form id="example">
    姓名:
        <input type="text" name="" v-model="data.name" placeholder="">
        <br>
  性别:
  <input type="radio" name="" id="man" value="One" v-model="data.sex">
  <label for="man">男</label>
    <input type="radio" name="" id="male" value="Two" v-model="data.sex">
    <label for="male">女</label>
    <br>
    兴趣:
  <input type="checkbox" id="book" value="book" name="" v-model="data.interest">
    <label for="book">阅读</label>
    <input type="checkbox" id="swim" value="swim" name="" v-model="data.interest"> 
    <label for="swim">游泳</label>
    <input type="checkbox" id="game" value="game" name="" v-model="data.interest">
    <label for="game">游戏</label>
    <input type="checkbox" id="song" value="song" name="" v-model="data.interest">
    <label for="song">唱歌</label>
    身份:
    <select v-model="data.job">
        <option value="teacher">教师</option>
        <option value="doctor">医生</option>
        <option value="police">警察</option>
    </select>
    </form>
    <script>
        new Vue ({
            el:'#example',
            data: {
                    data: {
                        name:"",
                        sex:"",
                        interest:[],
                        job:''
                    }
                }
            }
        })
    </script>

v-model后面可以添加多个参数(number、lazy、debounce)

<div id="example">
    <input type="text" name="" v-model="msg" lazy>
    {{msg}}
 </div>
    <script>
        var Vue({
            el:'#example',
            data: {
                msg: 'change事件之后改变'
            }
        })
    </script>
<div id="example">
    <input type="text" name="" v-model="msg" debounce=""5000>
    {{msg}}
 </div>
    <script>
        var Vue({
            el:'#example',
            data: {
                msg: '5000s之后改变'
            }
        })
    </script>

5、v-for : 基于源数据重复渲染元素

(1)可以使用$index来呈现相对应的数组索引。v-for需要特殊的别名,形式为“item in items”,(item是数据数组,item是当前数组元素的别名)。

(2)v-for遍历一个对象,每一个重复的实例都将有一个特殊的属性$Key,或者给对象的键值提供一个别名。

<div id="example">
     <ul id="repeat-object">
        <li v-for="value in primitiveValues">{{ $key }} : {{ value }}</li>
        <li>---------</li>
        <li v-for="( key, item ) in objectValues">{{ key }} : {{ item.msg }}</li>
     </ul>
    </div>
    <script>
        var demo = new Vue ({
            el:'#repeat-object',
            data: {
                primitiveValues: {
                    FirstName: 'A',
                    LastName: 'a',
                    Age: 10
                },
                objectValues: {
                    one: {
                        msg: 'Hello'
                    },
                    two: {
                        msg: 'World'
                    }
                }
            }
        })
    </script>

(3)v-for支持整数

<div id="range">
        <div v-for="n in 10">整数:{{ $index }}</div>
    </div>

6、v-text :可以更新元素的textContent,在内部,{{ Mustache }}插值也被编译为textNode的一个v-text指令。

<span v-text="msg"></span>
<br>
<span>{{ msg }}</span>

7、v-bind:用于响应更新HTML特性,将一个或多个attribute,或者一个组件prop动态绑定到表达式。

(1)绑定class或者style,支持其他类型的值。

<div id="example">
        <div : class = "[ classA , { classB:isB , classC:isC }]"></div>
    </div>
    <script>
        var demo = new Vue ({
            el:'#example',
            data: {
                classA: 'A',
                isB: false,
                isC: true
            }
        })
    </script>

(2)没有参数时,可以绑定到一个对象,此时的class和style绑定不支持数组和对象(key会转换成小写)。

<div id="example">
        <div v-bind="{ id:someProp, 'OTHERAttr': otherProp }"></div>
    </div>
    <script>
        var exampleVM2 = new Vue ({
            el:'#example',
            data: {
                someProp: 'idName',
                otherProp: 'prop'
            }
        })
    </script>

8、v-on : 用于绑定事件监听器,类型由参数指定。

<!--方法处理器-->
<button v-on:click="doThis"></button>
<!--内联语句-->
<button v-on:click="doThat('hello',$event)"></button>
<!--缩写-->
<button @click="doThis"></button>

后面可以增加修饰符:

  • .stop —— 调用event.stopPropagation()。
  • .prevent —— 调用event.preventDefault()。
  • .capture —— 添加事件侦听器时使用capture模式。
  • .self —— 只当事件是从侦听器绑定的元素本身触发时才会出发回调。

9、v-pre : 编译时跳过当前元素和它的子元素。

自定义指令

1、指令实例属性
el:指令绑定的元素。
vm:拥有该指令的上下文ViewModel
expression:指令的表达式,不包括参数和过滤器。
arg:指令的参数。
name:指令的名字。
modifiers:一个对象,包含指令的修饰符。
descriptor:一个对象,包含指令的解析结果。

 <div id="example" @click="up" >
    <div id="demo" v-demo:hello.a.b="msg">
    </div>
 </div>
 <script>
    Vue.directive('demo',{
        bind: function(){
            console.log('demo bound');
        },
        update: function(value){
            this.el.innerHTML = 
            'name - ' + this.name + '<br>' + 'expression - ' + this.expression + '<br>' + 'argument - ' + this.arg + '<br>' + 'modifiers - ' + JSON.stringify(this.modifiers) + '<br>' + 'value - ' + value + '<br>' + 'vm-msg' + this.vm.msg
        }
    })
    var demo = new Vue ({
        el:'#example',
        data: {
            msg: 'hello'
        },
        methods: {
            up: function() {
                console.info("click");
            }
        }
    })
 </script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 11,002评论 4 129
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,046评论 0 29
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,204评论 0 6
  • vue.js官网教程学习笔记和学习摘要 起步 安装 一个简单的方法,直接把一个vue.js引入你的HTML页面中,...
    恰皮阅读 3,366评论 2 22
  • 【日精进打卡持续第4天】 【知-学习】 1.背读《六项精进大纲》1遍,累计5遍 背诵《大学》3遍,累计9遍 2.学...
    沁舒阅读 157评论 0 0