过滤器

vue允许自定义过滤器,我个人认为,过滤器有两种,一种是对数据的清洗过滤,一种是对数据切换的动画过滤

数据切换的动画过滤

这里还是利用前面的动态组件的例子:

这里由于没办法展示动画效果,代码如下,自己体会吧:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>

    <style>
        .v-enter, .v-leave-to{
            transform: translateX(10px);
            opacity: 0;
        }
        .v-enter-active,.v-leave-active {
            transition: all .5s ease;
        }
    </style>
</head>
<body>
    <div id="app">
        <a href='' @click.prevent='Name="Vheader"'>头部</a>
        <a href='' @click.prevent='Name="Vfooter"'>底部</a>
        <transition mode='out-in'>
            <component :is="Name"></component>
        </transition>
    </div>
    <!--你的vue模块路径-->
    <script type="text/javascript" src="./node_modules/vue/dist/vue.min.js"></script>
    <script>
        Vue.component('Vheader', {
            template: '<div>头部内容</div>'
        })
        Vue.component('Vfooter', {
            template: '<div>底部内容</div>'
        })
        let app = new Vue({
            el: '#app',
            data: {  Name: ''},
        })
    </script>
</body>

</html>

动画过滤

其中transition是vue自带的动画组件,相关参数及说明:

并且会自带有这些css参数:

更详细的说明参见:官方文档

对数据的清洗过滤

什么意思呢?如果你没看明白,来,直接看个例子,相信你就能看懂了

这个过滤器,如果你是用过Python的django框架的朋友,应该很熟悉,django里面模板文件里也有个这种过滤器

全局过滤器

当然也有全局的过滤器,这个就跟前面的组件很像了

监听属性

监听属性一共有两种,都是作为监听数据的

计算属性

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。因为在模板中放入太多的逻辑会让模板过重且难以维护

计算属性默认是get,即获取值,当然也可以修改值,先看看get类型的:

最开始msg是test,然后computed属性内的就是计算属性,此时的是changestr,将值渲染到p标签上,当点击button元素原始的监听事件点击修改了msg的值后,计算属性changstr获取到新的值,立马做出反应,然后重新渲染到p标签上

set方式:

这里可能不太好理解

步骤:

  • 1.默认渲染出msg为test的
  • 2.计算属性changestr触发get方法
  • 3.渲染到p标签
  • 4.click点击
  • 5.绑定方法修改msg的值
  • 6.计算属性changestr触发set方法,修改值
  • 7.计算属性实时监听发现msg值修改,重新get值
  • 8.渲染到p标签

如果需要设置值的话,就需要如上分开写计算属性,是不是感觉有点像在写后端的api接口啊,哈哈

侦听器

虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的

比如这里,模拟一个网页搜索输入框,当我输入vue时,自动补齐数据为 vue 官网

注意:使用侦听器时,属性直接时那个待渲染的字符串msg

生命周期函数

又叫钩子函数,在组件的创建到销毁的每个时段都有一个hook函数,即钩子,这个就是生命周期函数

所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和方法进行运算。这意味着你不能使用箭头函数来定义一个生命周期方法 (例如 created: () => this.fetchTodos())。这是因为箭头函数绑定了父上下文,因此 this 与你期待的 Vue 实例不同,this.fetchTodos 的行为未定义

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会

生命周期函数一共有如下:

  • beforeCreate :创建之前
  • created:创建之后哦
  • beforeMount:挂载之前
  • mounted:挂载之后
  • beforeUpdate:更新之前
  • updated:更新之后
  • activated:激活之前
  • deactivated:激活之后
  • beforeDestroy:销毁之前
  • destroyed:销毁之后
  • errorCaptured:错误调用,这个可以忽略,基本不怎么用

那么这里呢就来一个大综合的例子:

<keep-alive></keep-alive>

但是,在很多时候,其实我们并不想删除,只是想隐藏就行了,比如之前直接一个css样式dispaly:none就行了,vue里其实也有这种类似的组件——keep-alive:

当点击销毁已经不会走beforeDestory和destoryed周期函数,这个组件暂且这样,以后还会用到的,详细的就看官方文档吧

以上生命周期函数代码:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>

    <style>

    </style>
</head>

<body>
    <div id="app">
    </div>
    <script type="text/javascript" src="./node_modules/vue/dist/vue.min.js"></script>
    <script>
        var Vcommon = {
            template: `<div>{{msg}}<button  @click="changeHander">修改</button></div>`,
            data() {
                return {
                    msg: 'test',
                }
            },
            methods: {
                changeHander() {
                    this.msg = 'vue的声明周期函数测试'
                }
            },
            beforeCreate() {
                console.log('创建之前')
            },
            created() {
                console.log('创建之后')
            },
            beforeMount() {
                console.log('挂载之前')
            },
            mounted() {
                console.log('挂载之后')
            },
            beforeUpdate() {
                console.log('更新之前')
            },
            updated() {
                console.log('更新之后')
            },
            beforeDestroy() {
                console.log('销毁之前')
            },
            destroyed() {
                console.log('销毁之后')
            },
        }
        let app = new Vue({
            el: '#app',
            data: {
                isShow: true
            },
            components: {
                Vcommon
            },
            methods: {
                change() {
                    this.isShow = !this.isShow
                }
            },
            template: `<div>
                <keep-alive>
                    <Vcommon v-if = 'isShow'/>
                </keep-alive>
                <button @click="change">销毁</button>
            </div>`

        })
    </script>
</body>

</html>

生命周期函数

以下为官方文档的声明周期函数的前后逻辑

根据个人经验,用的比较多的周期函数还是mouted

获取DOM元素

根据官方文档的解释,貌似是不太赞同获取DOM元素进行操作,不过还是给了一个可以直接获取DOM的元素的属性 ref 和$refs

希望获取的DOM给一个ref属性,值为自定义,通过mouted周期函数才能拿到数据,利用Vue实例中的$refs.(自定义的值)即可拿到:为什么是$refs这个可以自己去看官网

拿到之后就可以对其进行DOM操作了,如果希望获取组件对象,一样的操作即可

$nextTick延时

如下,我们希望对input标签用focus聚焦,打开自动去到输入框的效果:

但是你发现,明明可以拿到DOM元素,但是操作不了,这就是vue的虚拟DOM的效果了,虚拟DOM是react提出来的,然后三大框架现在都有了虚拟DOM的概念,因为加载速度比较快,性能较好

那么此时怎么办呢,利用$nextTick做延时就行:

打开页面input框自动聚焦已自动聚焦

代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>

    <style>

    </style>
</head>

<body>
    <div id="app">
    </div>
    <script type="text/javascript" src="./node_modules/vue/dist/vue.min.js"></script>
    <script>
        let app = new Vue({
            el: '#app',
            data: {

            },
            mounted() {
                // console.log(this.$refs.input)
                // console.log(this.$refs.input.focus())
                this.$nextTick(function () {
                    // 获取更新之后的DOM
                    this.$refs.input.focus()
                })
            },
            template: `<div>
                <input type="text" ref="input">
                </div>`

        })
    </script>
</body>

</html>

$nextTick

总结

其实没什么可说的,还是多看官方文档,我感觉写的很详细了,我的文章只是把一些可能经常用的抽出来而已

vue(4)—— vue的过滤器,监听属性,生命周期函数,获取DOM元素的更多相关文章

  1. Vue(八):监听属性watch

    Vue.js 可以通过 watch 来响应数据的变化. 以下实例模拟购物车里商品数量增加,对应价格也增加 <!--模拟购物车商品数量增加,价格也随之增加--> <div id = & ...

  2. (四)Jsoup 获取 DOM 元素属性值

    第一节: Jsoup 获取 DOM 元素属性值 Jsoup获取DOM元素属性值 比如我们要获取博客的href属性值: 我们这时候就要用到Jsoup来获取属性的值 : 我们给下示例代码: package ...

  3. Vue ---- 表单指令 条件指令 循环指令 分隔符 过滤器 计算属性 监听属性

    目录 案例讲解: 一. 表单指令 1.重点: 补充 2.单选框 3.单一复选框 4.多复选框 二 . 条件指令 v-if/v-show ... v-clock 三 . 循环指令 string arra ...

  4. vue中的computed(计算属性)和watch(监听属性)的特点,以及深度监听

    //计算属性是根据data中已有的属性,计算得到一个新的属性, <div>全名:{{fullName}}</div> 创建计算属性通过computed关键字,它是一个对象 计算 ...

  5. vue.js 监听属性的学习/ 千米、米的转换 /时、分、秒 的转换

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. 009——VUE中watch监听属性变化实现类百度搜索栏功能

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. Vue.js:监听属性

    ylbtech-Vue.js:监听属性 1.返回顶部 1. Vue.js 监听属性 本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化: 实例 & ...

  8. Vue计算属性和监听属性

    一.计算属性 计算属性关键词: computed.计算属性在处理一些复杂逻辑时是很有用的. 可以看下以下反转字符串的例子: <div id="app"> {{ mess ...

  9. vue条件语句、循环语句、计算属性、侦听器监听属性

    因为 v-if 和v-for是一个指令,所以必须将它添加到一个元素上.但是如果想切换多个元素呢?此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v-if.最终 ...

随机推荐

  1. Java面向接口编程,低耦合高内聚的设计哲学

    接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而 ...

  2. ArcGIS注册数据库问题分析

    本文是'猴妹'师妹授权给我来发表的,介绍都是师妹的研究成果,在此,非常感谢'猴妹'师妹. 用ArcGIS Server在发布地图服务时,注册数据库是很常见的,几年前就开始注册数据库,直到昨天,才有点顿 ...

  3. CYQ.Data 支持分布式数据库(主从备)高可用及负载调试

    前言: 继上一篇,介绍 CYQ.Data 在分布式缓存上支持高可用,详见:CYQ.Data 对于分布式缓存Redis.MemCache高可用的改进及性能测试 本篇介绍 CYQ.Data 在对数据库层面 ...

  4. echarts切换tab时,第一个图表显示,第二个图表不显示的解决办法

    首先这种情况,我在网上看到了好多人问,确实也有正解,但是只是说出了其错误出现的原因,并没有给出解决方法. 我也是深受其害,所以呢,在这里记录一下,分享给还在困扰着的你们,迅速找出解决办法. 首先,我先 ...

  5. ansible基础-优化

    简介 当管理集群达到一定规模时,ansible达到性能瓶颈是难以避免的,此时我们可以通过一定手段提高ansible的执行效率和性能. 笔者虽未管理过超大规模服务器,但也通过查找资料和咨询大神了解了一些 ...

  6. MySQL学习(四)Join 等开发常用的操作 --- 2019年2月

    1.查数据太多不会把内存用光 InnoDB 的数据是保存在主键索引上,然后索引树分割保存在数据页上,数据页存在内存中/磁盘.change buffer 就是先把修改操作记录,然后读数据的时候,内存没有 ...

  7. javascript放大镜效果

    JS实现放大镜效果 首先我们先设想一下放大镜效果 1.当鼠标进入小盒子的时候,把大图片显示出来 2.当指定移动区域的时候,显示当前放大区域(放大效果) 3.鼠标移除我们让它消失 一.实现页面布局HTM ...

  8. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十九║Vue基础: 样式动态绑定+生命周期

    回顾 哈喽大家好,前后端分离系列文章又开始了,今天周一,还是感谢大家花时间来观看我写的博客,周末呢,没有写文章,但是也没有闲着,主要是研究了下遗留问题,看过之前文章的应该知道,之前的在AOP使用Red ...

  9. 机器学习——决策树,DecisionTreeClassifier参数详解,决策树可视化查看树结构

    0.决策树 决策树是一种树型结构,其中每个内部节结点表示在一个属性上的测试,每一个分支代表一个测试输出,每个叶结点代表一种类别. 决策树学习是以实例为基础的归纳学习 决策树学习采用的是自顶向下的递归方 ...

  10. Python的线程池

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ concurrent 用于线程池和进程池编程而且更加容易,在Pytho ...