add:Vue.js 2.x(自定义全局指令)
This commit is contained in:
parent
04df21a2f5
commit
41801d3fb1
@ -469,8 +469,7 @@ js部分:
|
|||||||
.table {
|
.table {
|
||||||
width: 800px;
|
width: 800px;
|
||||||
margin: 20px auto;
|
margin: 20px auto;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;/*这一行,不能少:表格的两边框合并为一条*/
|
||||||
/*这一行,不能少:表格的两边框合并为一条*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.table th {
|
.table th {
|
||||||
|
@ -140,7 +140,7 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<!-- 通过 过滤器 msgFormat 对 msg 进行过滤。括号里的参数代表 function中的 arg2-->
|
<!-- 【重要】通过 过滤器 msgFormat 对 msg 进行过滤。括号里的参数代表 function中的 arg2-->
|
||||||
<p>{{ msg | msgFormat('xxx') }}</p>
|
<p>{{ msg | msgFormat('xxx') }}</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -171,11 +171,7 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑
|
|||||||
|
|
||||||
20180525_2135.png
|
20180525_2135.png
|
||||||
|
|
||||||
代码解释:
|
注意代码中那行重要的注释:括号里的参数代表 function中的 arg2。
|
||||||
|
|
||||||
也就是说,<p>标签在调用过滤器的时候(`{{ msg | msgFormat('xxx') }}`),括号的参数写的啥,就把指定字符串替换成啥。
|
|
||||||
|
|
||||||
括号里的参数代表 function中的 arg2。
|
|
||||||
|
|
||||||
**改进二**:过滤器加两个参数。如下:
|
**改进二**:过滤器加两个参数。如下:
|
||||||
|
|
||||||
@ -194,7 +190,7 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑
|
|||||||
<body>
|
<body>
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<!-- 通过 过滤器 msgFormat 对 msg 进行过滤-->
|
<!-- 通过 过滤器 msgFormat 对 msg 进行过滤-->
|
||||||
<!-- 括号里的第一个参数代表 function 中的 arg2,括号里的第二个参数代表 function 中的 arg3-->
|
<!-- 【重要】括号里的第一个参数代表 function 中的 arg2,括号里的第二个参数代表 function 中的 arg3-->
|
||||||
<p>{{ msg | msgFormat('【牛x】', '【参数arg3】') }}</p>
|
<p>{{ msg | msgFormat('【牛x】', '【参数arg3】') }}</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -288,7 +284,6 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 举例1:时间格式化
|
### 举例1:时间格式化
|
||||||
|
|
||||||
```html
|
```html
|
||||||
@ -607,30 +602,6 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## v-on的按键修饰符
|
|
||||||
|
|
||||||
### 默认按键修饰符
|
|
||||||
|
|
||||||
通俗一点讲,指的是:监听键盘输入的事件。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:
|
|
||||||
|
|
||||||
```
|
|
||||||
.enter
|
|
||||||
.tab
|
|
||||||
.delete (捕获 “删除” 和 “退格” 键)
|
|
||||||
.esc
|
|
||||||
.space
|
|
||||||
.up
|
|
||||||
.down
|
|
||||||
.left
|
|
||||||
.right
|
|
||||||
1.0.8+版本:支持单字母的按键别名。
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
132
21-Vue基础/01-06.自定义按键修饰符&自定义指令.md
Normal file
132
21-Vue基础/01-06.自定义按键修饰符&自定义指令.md
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
|
||||||
|
|
||||||
|
## v-on的按键修饰符
|
||||||
|
|
||||||
|
### Vue 内置的按键修饰符
|
||||||
|
|
||||||
|
通俗一点讲,指的是:监听键盘输入的事件。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符。如下:
|
||||||
|
|
||||||
|
Vue内置的按键修饰符:
|
||||||
|
|
||||||
|
```
|
||||||
|
.enter
|
||||||
|
.tab
|
||||||
|
.delete (捕获 “删除” 和 “退格” 键)
|
||||||
|
.esc
|
||||||
|
.space
|
||||||
|
.up
|
||||||
|
.down
|
||||||
|
.left
|
||||||
|
.right
|
||||||
|
1.0.8+版本:支持单字母的按键别名。
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
比如说,`keyup`指的是,键盘抬起时的监听事件。`.enter`指的是按enter键的按键修饰符。
|
||||||
|
|
||||||
|
**`@keyup.enter`举例**:按enter键后的监听事件
|
||||||
|
|
||||||
|
`@keyup.enter="addData"`表示:按住enter键后,执行addData()方法。**全称**是`v-on:key.enter="addData"`。
|
||||||
|
|
||||||
|
我们还是拿`01-04`这篇文章中的列表功能来举例。之前是点击“添加”按钮后,列表中会添加一个item。现在要求:在**输入框**中按enter键后,也能添加一个item。
|
||||||
|
|
||||||
|
核心代码如下:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<input type="text" v-model="formData.name" @keyup.enter="addData">
|
||||||
|
```
|
||||||
|
|
||||||
|
注意,如果写成`@keyup="addData"`,效果却是:只要键盘打了字(还没来得及按enter键),就会执行addData()方法,这种效果显然不是我们想要的。
|
||||||
|
|
||||||
|
### 自定义的按键修饰符
|
||||||
|
|
||||||
|
如果我们直接在代码的`<input>`标签里写`@keyup.f2="addData"`,那么,按住「F2键」后,是没有效果的,因为「F2键」不是内置的按键修饰符(如果F2不能验证,你可以试一下F7)。
|
||||||
|
|
||||||
|
我们知道,每个按键都有一个键盘码。参考链接:
|
||||||
|
|
||||||
|
- [js 里面的键盘事件对应的键码](http://www.cnblogs.com/wuhua1/p/6686237.html)
|
||||||
|
|
||||||
|
通过查阅,我们知道了「F2键」的键盘码为`113`,那代码可以这样写:(按住F2键后,执行 addData 方法)
|
||||||
|
|
||||||
|
```html
|
||||||
|
<input type="text" v-model="formData.name" @keyup.113="addData">
|
||||||
|
```
|
||||||
|
|
||||||
|
虽然键盘码很全,但是不好记呀。于是,接下来,我们给键盘码定义别名。
|
||||||
|
|
||||||
|
**自定义全局按键修饰符**:
|
||||||
|
|
||||||
|
```
|
||||||
|
//自定义全局按键修饰符
|
||||||
|
Vue.config.keyCodes.f2 = 113;
|
||||||
|
```
|
||||||
|
|
||||||
|
上方代码的书写位置,与自定义全局过滤器的位置,是并列的。
|
||||||
|
|
||||||
|
然后,我们就可以使用键盘码的别名了。
|
||||||
|
|
||||||
|
## 自定义指令
|
||||||
|
|
||||||
|
### 自定义全局指令
|
||||||
|
|
||||||
|
**举例**:网页打开后,让指定文本框自动获取焦点。
|
||||||
|
|
||||||
|
如果我们想实现上面的例子,原生js的写法是:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
//原生js写法:网页一打开,就让指定的输入框自动获取焦点
|
||||||
|
document.getElementById('search').focus()
|
||||||
|
```
|
||||||
|
|
||||||
|
代码的位置:
|
||||||
|
|
||||||
|
20180527_2340.png
|
||||||
|
|
||||||
|
但我们不建议这样做。我们可以通过Vue中的自定义指令来实现这个例子。步骤如下。
|
||||||
|
|
||||||
|
|
||||||
|
(1)使用`Vue.directive()`自定义全局指令:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
|
||||||
|
//参数1:指令的名称。注意,在定义的时候,指令的名称前面,不需要加 v- 前缀;但是:在`调用`的时候,必须在指令名称前 加上 v- 前缀
|
||||||
|
//参数2:是一个对象,这个对象身上,有一些指令相关的函数,这些函数可以在特定的阶段,执行相关的操作
|
||||||
|
Vue.directive('focus', {
|
||||||
|
//在每个 函数中,第一个参数,永远是 el ,表示 被绑定了指令的那个元素,这个 el 参数,是一个原生的JS对象
|
||||||
|
bind: function (el) { // 每当指令绑定到元素上的时候,会立即执行这个 bind 函数,只执行一次
|
||||||
|
// 在元素 刚绑定了指令的时候,还没有 插入到 DOM中去,这时候,调用 focus 方法没有作用
|
||||||
|
// 因为,一个元素,只有插入DOM之后,才能获取焦点
|
||||||
|
// el.focus()
|
||||||
|
},
|
||||||
|
inserted: function (el) { // inserted 表示元素 插入到DOM中的时候,会执行 inserted 函数【触发1次】
|
||||||
|
el.focus()
|
||||||
|
// 和JS行为有关的操作,最好在 inserted 中去执行,放置 JS行为不生效
|
||||||
|
},
|
||||||
|
updated: function (el) { // 当VNode更新的时候,会执行 updated, 可能会触发多次
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
上方的代码中,
|
||||||
|
|
||||||
|
(2)在指定的文本框上加``:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<input type="text" id="search" v-model="keywords" v-focus>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
01-06.自定义按键修饰符&自定义私有指令.md
|
|
Loading…
Reference in New Issue
Block a user