指令、修饰符

指令:

以 v- 开头的就是指令

<div v-text="x"></div>
<div v-html="xx"></div>

指令语法:

v- 指令名:参数 = 值 eg. v-on:click = add

  • 如果值里没有特殊字符,则可以不叫引号
  • 有些指令没有参数和值,如 v-pre (不被编译)
  • 有些指令没有值,如 v-on:click.prevent
自定义指令:

声明一个全局指令

// Vue.directive('x',directiveOptions) 任何组件里用 v-x
Vue.directive('x',{
    inserted:function(el){
        el.addEventListener('click',()=>{console.log('x')})
    }
})

声明一个局部指令

new Vue ({
    ...,
    directives:{
        'x':directiveOptions
    }
}) //这时v-x只能在该实例中使用
directiveOptions

五个函数属性

bind(el,info,vnode,oldVnode) -- 类似 created
inserted(参数同上) -- 类似 mounted
update(参数同上) -- 类似 update
unbind(参数同上) -- 类似 destroyed

v-on2 实现一个简化版的 v-on

new Vue({
    directives:{
        on2:{
            inserted(el,info){
                el.addEventListener(info.arg,info.value)
            },
            unbind(el,info){
                el.removeEventListener(info.arg,info.value)
            }
        }
    }
})
指令的作用:
  • 用于DOM操作
    Vue实例/组件用于数据绑定、事件监听、DOM更新(监听器更新)
    Vue指令主要目的就是原生DOM操作(通过DOM API 进行操作)
  • 减少重复
    如果某个DOM操作比较经常使用,就可以封装成指令
    如果某个DOM操作比较复杂,也可以封装成指令

常用修饰符:

  • @click.stop = "XXX" // 阻止事件传播/冒泡
  • @click.prevent = "XXX" // 阻止默认动作
  • @keypress.enter = "XXX" // 键盘按下enter事件
  • :money.sync = "total" // 语法糖见下文

父子组件传值规则:

  1. 组件不能修改props外部数据。
  2. $emit 可以触发事件,并传参。
  3. event 可以获取emit 的参数。

App.vue

<template>
    <div class="app">
        班级人数 {{total}}
        //<Child :number="total" v-on:addPeople="total = $event"/>
        <Child :number="total" v-on:update:number="total = $event"/>//推荐用法
        <Child :money.sync="total"/> //vue封装的一个修饰符,等同于上面的语法
    </div>
</template>
<script>
    import Child from "./Child.vue"
    export default{
        data(){
            return {total:50};
        },
        components:{Child}
    }
</script>

Child.vue

<template>
    <div class="child">
        {{number}}
        //<button @click="$emit('addPeople', number+1)">
        <button @click="$emit('update:number', number+1)">//推荐用法
            来了一个插班生
        </button>
    </div>
</template>
<script>
    export default {
        props: ["number"]
    }
</script>

.sync 修饰符:

一个编译时的语法糖。它被扩展为一个自动更新父组件属性的 v-on 监听器
即<Child :number="total" v-on:update:number="total = $event"/> 等价于 <Child :money.sync="total"/>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容

  • MVC:后端的分层开发概念。 MVVM:是前端视图层的分层开发思想。 在vm实例中,如果想要获取data上的数据,...
    L流苏阅读 737评论 1 0
  • 一、先用一张图理解下冒泡和捕获 二、事件修饰符 .stop阻止冒泡(通俗讲就是阻止事件向上级DOM元素传递) .p...
    讲武德的年轻人阅读 234评论 0 0
  • 指令=修饰符 =修饰符 1.格式: 2.注意:使用= 传递数据,传入是一个变量, 不需要使用{{}} 3.注意:只...
    codeTao阅读 549评论 0 0
  • 指令@修饰符 1.作用域 我们可以利用修饰符,让父级传入一些常量,或者变量到自己的作用域。 @修饰符: 1.@修饰...
    codeTao阅读 749评论 0 0
  • image.png .stop阻止冒泡 image.pngimage.png阻止冒泡.png .prevent ....
    增商阅读 242评论 0 0