vue指令用法


vue指令

指令式带有 v- 前缀的特殊特性 v-textv-html都属于指令 将数据和dom做关联,当表达式的值改变时,响应式地作用在视图

解决大胡子语法闪烁案例

[v-cloak] {
dispaly: none;
}

一般把v-cloak 绑在Vue实例el属性绑定的节点上

<!DOCTYPE html>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>Title</title>
<scriptsrc="https://cdn.jsdelivr.net/npm/vue@2.5.22/dist/vue.js"></script>
<style>

[v-cloak] {
display: none;
}

</style>
</head>
<body>

<divid="app"v-cloak>
{{msg}}
</div>
<script>
var vm = new Vue({
el: "#app",
data: {
msg: "问题"
}
</script>

</body>
</html>

v-bind给标签属性绑定使用

v-bind是让标签属性可以动态的使用data参数或者写一些简单的js表达式

v-text,v-html不同它俩是针对标签中的内容,v-bind是针对标签中的属性

v-bind案例:

<!DOCTYPE html>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>Title</title>
<!--导入Vue cdn 的网址-->
<scriptsrc="https://cdn.jsdelivr.net/npm/vue@2.5.22/dist/vue.js"></script>
</head>
<body>
<divid="app" >
<av-bind:href="url"v-bind:title="title">v-bind的缩写是冒号:</a>
</div>
<script>
var vm = new Vue({
el:"#app",
data:{
url:"www.baidu.com",
title:'百度'
}
})
</script>
</body>
</html>

v-on绑定事件 v-on 方法处理器和内联处理器

方法处理器 内联处理器

v-on 对象处理 v-on:keyup 监听按键触发

事件修饰符

阻止事件冒泡--stop 实现捕获触发事件的机制--capture 只会阻止自己身上冒泡行为--self 阻止默认事件--prevent 只触发一次默认行为

v-on绑定事件 可以用v-on指令监听DOM事件

<button v-on:click="alert('a')">v-on</button>

v-on的缩写@符号

v-on方法处理器和内联处理器

<!DOCTYPE html>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>Title</title>
<!--导入Vue cdn 的网址-->
<scriptsrc="https://cdn.jsdelivr.net/npm/vue@2.5.22/dist/vue.js"></script>
</head>
<body>
<divid="app" >
<buttonv-on:click="doThis">v-on按钮</button>
</div>
<script>
var vm = new Vue({
el:"#app",
methods:{
// es6 语法
doThis(){
if (event) {
alert(event.target.tagName)
}
alert(
'我是方法处理器')
}
},
})
</script>
</body>
</html>
使用的时候带括号:'<button v-on:click="doThat('hello', $event)"></button>'

带括号的好处是可以传参,但不自带evet 事件,想使用event事件需要$event
参数传入
<!DOCTYPE html>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>Title</title>
<!--导入Vue cdn 的网址-->
<scriptsrc="https://cdn.jsdelivr.net/npm/vue@2.5.22/dist/vue.js"></script>
</head>
<body>
<divid="app" >
<buttonv-on:click="doThat('hello', $event)">v-on按钮</button>
</div>
<script>
var vm = new Vue({
el:"#app",
methods:{
// es6 语法
doThat(parameter, event){
let msg = parameter + "内联方法";
if (event) {
alert(event.target.tagName)
}
alert(msg);
}
},
})
</script>
</body>
</html>

内联处理器是指的什么呢?

<divid="example-3">
<buttonv-on:click="say">Say hi</button>
<buttonv-on:click="say">Say what</button>
</div>
new Vue({
el: '#example-3',
methods: {
say: function () {
alert('hello');
}
}
});

写法:

<divid="example-3">
<buttonv-on:click="say('hi')">Say hi</button>
<buttonv-on:click="say('what')">Say what</button>
</div>
new Vue({
el: '#example-3',
methods: {
say: function (message) {
alert(message);
}
}
});

差异 一个有括号,一个没括号,对吧?

没括号的这个,直接就是函数名,有括号的这个,实际是一条JS语句,有括号的这个就叫『内联处理器』。

没括号的有这么一个好处:

<divid="example-3">
<buttonv-on:click="say">Say hi</button>
<buttonv-on:click="say">Say what</button>
</div>
new Vue({
el: '#example-3',
methods: {
say: function (event) {
alert(event.target.tagName);
}
}
});

有括号的

让有括号的也能得到无括号娘胎里自带的event参数

<divid="example-3">
<buttonv-on:click="say('hi', $event)">Say hi</button>
<buttonv-on:click="say('what', $event)">Say what</button>
</div>
new Vue({
el: '#example-3',
methods: {
say: function (message, event) {
alert(message);
alert(event.target.tagName);
}
}
});

事件处理 监听事件

<divid="example">
<buttonv-on:click="counter += 1">Add</button>
<p>the button{{counter}}time</p>
</div>
var example = new Vue({
el: '#example',
data: {
counter: 0
}
})

事件处理方法:

<divid="example-2">
<!-- `greet` 是在下面定义的方法名 -->
<buttonv-on:click="greet">Greet</button>
</div>
var example2 = new Vue({
el: '#example-2",
data: {
name: "Vue.js"
},
methods: {
greet: function(event) {
alert('hello' + this.name)
if(event){
alert(event.target.tagName)
}
}
}
})
example2.greet()

内联处理器中的方法

<div id="example-3">
<buttonv-on:click="say('hi')">Say hi</button>
<buttonv-on:click="say('what')">Say what</button>
</div>

new Vue({
el: '#example-3',
methods: {
say: function (message) {
alert(message)
}
}
})
<button v-on:click="warn('Form cannot be submitted yet.', $event)">
Submit
</button>

// ...
methods: {
warn: function (message, event) {
// 现在我们可以访问原生事件对象
if (event) event.preventDefault()
alert(message)
}
}

事件修饰符:在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation()

Vue.js 为 v-on 提供了事件修饰符

.stop
.prevent
.capture
.self
.once
.passive
<!-- 阻止单击事件继续传播 -->
<av-on:click.stop="doThis"></a>

<!-- 提交事件不再重载页面 -->
<formv-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<av-on:click.stop.prevent="doThat"></a>

<!-- 只有修饰符 -->
<formv-on:submit.prevent></form>

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 -->
<divv-on:click.capture="doThis">...</div>

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<divv-on:click.self="doThat">...</div>

v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击

<!-- 点击事件将只会触发一次 -->
<av-on:click.once="doThis"></a>
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成 -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<divv-on:scroll.passive="onScroll">...</div>

这个 .passive 修饰符尤其能够提升移动端的性能

不要把 .passive 和 .prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。

按键修饰符

<!-- 只有在 `keyCode` 是 13 时调用 `vm.submit()` -->
<inputv-on:keyup.13="submit">

<!-- 同上 -->
<inputv-on:keyup.enter="submit">

<!-- 缩写语法 -->
<input @keyup.enter="submit">

.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right

// 可以使用 `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112

自动匹配按键修饰符

<input @keyup.page-down="onPageDown">

处理函数仅在 $event.key === 'PageDown' 时被调用

系统修饰键

.ctrl
.alt
.shift
.meta
<!-- Alt + C -->
<input @keyup.alt.67="clear">

<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>


.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。

<!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
<button @click.ctrl="onClick">A</button>

<!-- 有且只有 Ctrl 被按下的时候才触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button>

<!-- 没有任何系统修饰符被按下的时候才触发 -->
<button @click.exact="onClick">A</button>

.left
.right
.middle



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

推荐阅读更多精彩内容

  • vue指令 指令式带有v-前缀的特殊特性v-text和v-html都属于指令 将数据和dom做关联,当表达式的值改...
    IT小鲍阅读 712评论 0 0
  • vue指令 指令式带有v-前缀的特殊特性v-text和v-html都属于指令 将数据和dom做关联,当表达式的值改...
    IT小鲍阅读 536评论 0 0
  • 1. Vue 实例 1.1 创建一个Vue实例 一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实...
    王童孟阅读 1,013评论 0 2
  • 指令用在我们的html中。 指令 (Directives) 是带有v-前缀的特殊特性。指令特性的值预期是单个 Ja...
    Rising_life阅读 436评论 0 3
  • 夏爱上了冬的羊皮大袄 但冬只爱春散着花香的发梢 于是,夏冬倒置 春 冬 秋 夏。 最后春的花冻死在冬的雪 秋的叶颓...
    漻涸阅读 251评论 1 5