From 41801d3fb150a352ac532be089d3ba266be57e7a Mon Sep 17 00:00:00 2001 From: qianguyihao Date: Sun, 27 May 2018 23:51:20 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9AVue.js=202.x=EF=BC=88=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=85=A8=E5=B1=80=E6=8C=87=E4=BB=A4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 21-Vue基础/01-04.Vue的举例:列表功能.md | 3 +- .../01-05.自定义过滤器:时间格式化举例.md | 35 +---- .../01-06.自定义按键修饰符&自定义指令.md | 132 ++++++++++++++++++ .../01-06.自定义按键修饰符&自定义私有指令.md | 1 - 4 files changed, 136 insertions(+), 35 deletions(-) create mode 100644 21-Vue基础/01-06.自定义按键修饰符&自定义指令.md delete mode 100644 21-Vue基础/01-06.自定义按键修饰符&自定义私有指令.md diff --git a/21-Vue基础/01-04.Vue的举例:列表功能.md b/21-Vue基础/01-04.Vue的举例:列表功能.md index cd66c0b..cb64f55 100644 --- a/21-Vue基础/01-04.Vue的举例:列表功能.md +++ b/21-Vue基础/01-04.Vue的举例:列表功能.md @@ -469,8 +469,7 @@ js部分: .table { width: 800px; margin: 20px auto; - border-collapse: collapse; - /*这一行,不能少:表格的两边框合并为一条*/ + border-collapse: collapse;/*这一行,不能少:表格的两边框合并为一条*/ } .table th { diff --git a/21-Vue基础/01-05.自定义过滤器:时间格式化举例.md b/21-Vue基础/01-05.自定义过滤器:时间格式化举例.md index 96f16eb..b27eaa5 100644 --- a/21-Vue基础/01-05.自定义过滤器:时间格式化举例.md +++ b/21-Vue基础/01-05.自定义过滤器:时间格式化举例.md @@ -140,7 +140,7 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑
- +

{{ msg | msgFormat('xxx') }}

@@ -171,11 +171,7 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑 20180525_2135.png -代码解释: - -也就是说,

标签在调用过滤器的时候(`{{ msg | msgFormat('xxx') }}`),括号的参数写的啥,就把指定字符串替换成啥。 - -括号里的参数代表 function中的 arg2。 +注意代码中那行重要的注释:括号里的参数代表 function中的 arg2。 **改进二**:过滤器加两个参数。如下: @@ -194,7 +190,7 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑

- +

{{ msg | msgFormat('【牛x】', '【参数arg3】') }}

@@ -288,7 +284,6 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑 - ### 举例1:时间格式化 ```html @@ -607,30 +602,6 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑 -## v-on的按键修饰符 - -### 默认按键修饰符 - -通俗一点讲,指的是:监听键盘输入的事件。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符: - -``` - .enter - .tab - .delete (捕获 “删除” 和 “退格” 键) - .esc - .space - .up - .down - .left - .right - 1.0.8+版本:支持单字母的按键别名。 -``` - - - - - - diff --git a/21-Vue基础/01-06.自定义按键修饰符&自定义指令.md b/21-Vue基础/01-06.自定义按键修饰符&自定义指令.md new file mode 100644 index 0000000..09b0229 --- /dev/null +++ b/21-Vue基础/01-06.自定义按键修饰符&自定义指令.md @@ -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 + +``` + +注意,如果写成`@keyup="addData"`,效果却是:只要键盘打了字(还没来得及按enter键),就会执行addData()方法,这种效果显然不是我们想要的。 + +### 自定义的按键修饰符 + +如果我们直接在代码的``标签里写`@keyup.f2="addData"`,那么,按住「F2键」后,是没有效果的,因为「F2键」不是内置的按键修饰符(如果F2不能验证,你可以试一下F7)。 + +我们知道,每个按键都有一个键盘码。参考链接: + +- [js 里面的键盘事件对应的键码](http://www.cnblogs.com/wuhua1/p/6686237.html) + +通过查阅,我们知道了「F2键」的键盘码为`113`,那代码可以这样写:(按住F2键后,执行 addData 方法) + +```html + +``` + +虽然键盘码很全,但是不好记呀。于是,接下来,我们给键盘码定义别名。 + +**自定义全局按键修饰符**: + +``` + //自定义全局按键修饰符 + 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 + +``` + + + + + + + + + + + + + + diff --git a/21-Vue基础/01-06.自定义按键修饰符&自定义私有指令.md b/21-Vue基础/01-06.自定义按键修饰符&自定义私有指令.md deleted file mode 100644 index c235c5e..0000000 --- a/21-Vue基础/01-06.自定义按键修饰符&自定义私有指令.md +++ /dev/null @@ -1 +0,0 @@ -01-06.自定义按键修饰符&自定义私有指令.md \ No newline at end of file