From 712ee55dd617c59da5a706d87e2310c5d0c970cf Mon Sep 17 00:00:00 2001 From: qianguyihao Date: Sun, 10 Jun 2018 14:26:30 +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=E6=8C=87=E4=BB=A4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 00-前端工具/01-Git的使用.md | 4 + .../01-05.自定义过滤器:时间格式化举例.md | 2 +- .../01-06.自定义按键修饰符&自定义指令.md | 274 +++++++++++++++++- 21-Vue基础/02-Vue实例的生命周期函数.md | 88 ++++++ 21-Vue基础/03-Vue的生命周期函数.md | 56 ---- README.md | 2 +- 6 files changed, 358 insertions(+), 68 deletions(-) create mode 100644 21-Vue基础/02-Vue实例的生命周期函数.md delete mode 100644 21-Vue基础/03-Vue的生命周期函数.md diff --git a/00-前端工具/01-Git的使用.md b/00-前端工具/01-Git的使用.md index 30c652c..c8c7a2f 100644 --- a/00-前端工具/01-Git的使用.md +++ b/00-前端工具/01-Git的使用.md @@ -3,6 +3,10 @@ ## 日常操作积累 +### 修改已经commit的备注信息 + + + ### 将 `branch1`的某个`commit1`合并到`branch2`当中 diff --git a/21-Vue基础/01-05.自定义过滤器:时间格式化举例.md b/21-Vue基础/01-05.自定义过滤器:时间格式化举例.md index b27eaa5..d9f16ca 100644 --- a/21-Vue基础/01-05.自定义过滤器:时间格式化举例.md +++ b/21-Vue基础/01-05.自定义过滤器:时间格式化举例.md @@ -530,7 +530,7 @@ Vue也提供了一个接口用来供程序员定义属于自己的特殊逻辑 ``` -### 自定义私有过滤器 +## 自定义私有过滤器 **私有过滤器**:在某一个 vue 对象内部定义的过滤器称之为私有过滤器。这种过滤器只有在当前vue对象的el指定的监管区域有用。 diff --git a/21-Vue基础/01-06.自定义按键修饰符&自定义指令.md b/21-Vue基础/01-06.自定义按键修饰符&自定义指令.md index de54414..0825d95 100644 --- a/21-Vue基础/01-06.自定义按键修饰符&自定义指令.md +++ b/21-Vue基础/01-06.自定义按键修饰符&自定义指令.md @@ -22,7 +22,7 @@ Vue内置的按键修饰符: ``` -比如说,`keyup`指的是,键盘抬起时的监听事件。`.enter`指的是按enter键的按键修饰符。 +比如说,`keyup`指的是:键盘(任何键位)抬起时的监听事件。`.enter`指的是:按enter键的按键修饰符。我们把这两个结合起来看看。 **`@keyup.enter`举例**:按enter键后的监听事件 @@ -36,7 +36,7 @@ Vue内置的按键修饰符: ``` -注意,如果写成`@keyup="addData"`,效果却是:只要键盘打了字(还没来得及按enter键),就会执行addData()方法,这种效果显然不是我们想要的。 +注意,如果写成`@keyup="addData"`,效果却是:只要键盘的任何键位打了字(还没来得及按enter键),就会执行addData()方法,这种效果显然不是我们想要的。所以要加上修饰符`.enter`,表示只针对enter键。 ### 自定义的按键修饰符 @@ -65,13 +65,13 @@ Vue内置的按键修饰符: 然后,我们就可以使用键盘码的别名了。 -## 自定义指令 +## 自定义全局指令 -### 自定义全局指令的举例 +### 自定义全局指令的举例1 -**举例**:网页打开后,让指定文本框自动获取焦点。 +**举例1**:让指定文本框自动获取焦点 -如果我们想实现上面的例子,原生js的写法是: +如果我们想实现这个例子,原生js的写法是: ```javascript //原生js写法:网页一打开,就让指定的输入框自动获取焦点 @@ -84,16 +84,16 @@ Vue内置的按键修饰符: 但我们不建议这样做。我们可以通过Vue中的自定义指令来实现这个例子。步骤如下。 - (1)使用`Vue.directive()`自定义全局指令: ```javascript + //自定义全局指令 v-focus:让文本框自动获取焦点 //参数1:指令的名称。注意,在定义的时候,指令的名称前面,不需要加 v- 前缀;但是:在`调用`的时候,必须在指令名称前 加上 v- 前缀 //参数2:是一个对象,这个对象身上,有一些指令相关的函数,这些函数可以在特定的阶段,执行相关的操作 Vue.directive('focus', { //在每个函数中,第一个参数,永远是 el ,表示 被绑定了指令的那个元素,这个 el 参数,是一个原生的JS对象(DOM对象) - bind: function (el) { // 每当指令绑定到元素上的时候,会立即执行这个 bind 函数,只执行一次 + bind: function (el) { // 每当指令绑定到元素上的时候,会立即执行这个 bind 函数,【只执行一次】 // 在元素 刚绑定了指令的时候,还没有 插入到 DOM中去,这时候,调用 focus 方法没有作用 // 因为,一个元素,只有插入DOM之后,才能获取焦点 // el.focus() @@ -102,14 +102,15 @@ Vue内置的按键修饰符: el.focus() // 和JS行为有关的操作,最好在 inserted 中去执行,放置 JS行为不生效 }, - updated: function (el) { // 当VNode更新的时候,会执行 updated, 可能会触发多次 + updated: function (el) { // 当VNode更新的时候,会执行 updated, 【可能会触发多次】 } }) ``` +上方的代码中,如果我们把`el.focus()`这行代码写在`bind`方法里,是没有效果的(但不会报错)。没有效果是因为,在执行到`bind`方法的时候,元素还没有插入到dom中去。 -上方的代码中, +由此可以看看出:`bind`、`inserted`、`updated`这三个钩子函数的执行时机不同,且执行的次数有区别。 (2)在指定的文本框上加``: @@ -117,5 +118,258 @@ Vue内置的按键修饰符: ``` +完整版代码如下: + +```html + + + + + + + + Document + + + + + +
+ 搜索框: + +
+ + + + + + +``` + + +### 自定义全局指令:使用钩子函数的第二个binding参数拿到传递的值 + +**举例2**:设置DOM元素的color样式 + + +参考举例1中的写法,我们可能会这样给DOM元素设置样式: + +```html + + + + + + + + Document + + + + + +
+ 搜索框: + +
+ + + + + +``` + +如上方代码所示,我们自定义了一个指令`v-color`,然后在`input`标签中用上了这个指令,就给元素设置了color属性。但是这个代码有个弊端是:color的属性值在定义指令的时候,被写死了。如何完善呢?我们可以在DOM元素中传参。一起来看看。 + +代码如下:【荐】 + +```html + + + + + + + + Document + + + + + +
+ 搜索框1: + +
+ + + + + +``` + +上方代码中,bind方法里传递的第二个参数`binding`,可以拿到DOM元素中`v-color`里填的值。注意,`v-color="'green'"`,这里面写的是字符串常量;如果去掉单引号,就成了变量,不是我们想要的。 + +效果: + +20180610_1323.png + +**自定义全局指令的简写形式**: + + +在很多时候,你可能想在 bind 和 update 时触发相同行为,而不关心其它的钩子。比如上面的代码中,我们可以写成简写形式: + +```javascript + Vue.directive('color', function (el, binding) { //注意,这个function等同于把代码写到了 bind 和 update 中去 + el.style.color = binding.value + }) +``` + + +## 自定义私有指令 + +**自定义私有指令**:在某一个 vue 对象内部自定义的指令称之为私有指令。这种指令只有在当前vue对象的el指定的监管区域有用。 + +代码举例:(设置文字的font-weight属性) + +```html + + + + + + + + Document + + + + + +
+ 生命壹号 +
+ + + + +``` + +效果: + +20180610_1400.png + +注意, el.style.fontWeight设置属性值,至少要600,否则看不到加粗的效果。 + +**自定义私有指令的简写形式**: + +在很多时候,你可能想在 bind 和 update 时触发相同行为,而不关心其它的钩子。比如上面的代码中,我们可以写成简写形式: + +``` + //自定义私有指令(简写形式) + directives: { + 'fontweight': function (el, binding) { //注意,这个function等同于把代码写到了 bind 和 update 中去 + el.style.fontWeight = binding.value; + } + } +``` + + + + + diff --git a/21-Vue基础/02-Vue实例的生命周期函数.md b/21-Vue基础/02-Vue实例的生命周期函数.md new file mode 100644 index 0000000..654ab9a --- /dev/null +++ b/21-Vue基础/02-Vue实例的生命周期函数.md @@ -0,0 +1,88 @@ + + + +## 介绍 + +### 定义 + + + +[vue实例的生命周期](https://cn.vuejs.org/v2/guide/instance.html#实例生命周期):从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期。 + + +[生命周期钩子](https://cn.vuejs.org/v2/api/#选项-生命周期钩子):就是生命周期事件的别名而已。 + +生命周期钩子 = 生命周期函数 = 生命周期事件。 + + +### 主要的生命周期函数分类 + + +创建期间的生命周期函数: + + + + beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性 + + created:实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板 + + beforeMount:此时已经完成了模板的编译,但是还没有挂载到页面中 + + mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中显示 + - 运行期间的生命周期函数: + + beforeUpdate:状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的 数据还是旧的,因为此时还没有开始重新渲染DOM节点 + + updated:实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了! + - 销毁期间的生命周期函数: + + beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。 + + destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 + + +## Vue 2.0的生命周期函数 + +![](http://img.smyhvae.com/20180422_1650.png) + +```html + + + + + + Title + + + + + +
+
+ + + + + +``` + +打印结果: + +![](http://img.smyhvae.com/20180420_2302.png) + + diff --git a/21-Vue基础/03-Vue的生命周期函数.md b/21-Vue基础/03-Vue的生命周期函数.md deleted file mode 100644 index 1953fb0..0000000 --- a/21-Vue基础/03-Vue的生命周期函数.md +++ /dev/null @@ -1,56 +0,0 @@ - - - -## Vue 2.0的生命周期函数 - -![](http://img.smyhvae.com/20180422_1650.png) - -```html - - - - - - Title - - - - - -
-
- - - - - -``` - -打印结果: - -![](http://img.smyhvae.com/20180420_2302.png) - - diff --git a/README.md b/README.md index e37a0d9..938a0a6 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,4 @@ 更多内容,请点开文件夹。 - +另外,欢迎关注本人的公众号「生命团队」,会分享一些技术之外的软技能(和代码完全无关)。公众号里的每篇文章,自认为写得还算用心。“全栈”不应该只是体现在技术上,而是全方位。