前端学习---vue2--选项/数据--data-computed-watch-methods-props

这篇具有很好参考价值的文章主要介绍了前端学习---vue2--选项/数据--data-computed-watch-methods-props。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面:
vue提供了很多数据相关的。

data 动态绑定

介绍

简单的说就是进行双向绑定的区域。
vue实例的数据对象,会把data的数据转换成getter和setter,从而可以进行响应式的变化,

vue实例创建后,可以通过vm.$data.x获取data里面的x,但同时vue实例也代理了其中的对象,所以我们一般使用简单的vm.x(this.x)就可以访问了

使用

在vue工程中data并不是一个对象,而是一个函数,其返回值是需要进行响应式的对象。
但是在引入vue的界面中可以这么写。
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js
正确的写法应该是,return一个要响应式的对象,对象包括了所有需要响应式的数据。
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js
此时在html定义的

<div>{{ a }}</div>

结果
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js

data一般写成

    data() {
        return {
            a: 1
        }
    },

如果你为 data property 使用了箭头函数,则 this 不会指向这个组件的实例,不过你仍然可以将其实例作为函数的第一个参数来访问。

data: vm => ({ a: vm.myProp })

很好奇的是通过app.__vue__拿到的vue对象里面有一个_data是不是这个东西,不过我看里面一直在嵌套不晓得干嘛呢
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js

使用数据

1.在模板html中可以使用插值表达式(在介绍指令的时候介绍过了)来进行动态绑定。
2.而在js中,需要通过this.x来获取x的数据。

注意一点:不是所有的vue都可以拿到,我在filters中的时候,无论是this,还是通过全局变量。
我都拿不到外面的实例,最终需要通过方法传值来进行。
具体的这些在filters的介绍在写。

3.在组件的属性上使用之间用:属性名="绑定属性"来进行就可以了
4.一些指令可以直接赋值`使用
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js

computed 计算属性

介绍

顾名思义,计算属性,基于现有的数据计算出来的,依赖的数据变化,计算属性也会变化。
优势:初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。相同的计算有缓存,只计算一次。

基础使用

外面在js里面声明computed的配置
一个计算属性对应一个函数,这个函数需要返回属性的值
使用起来就和data里面的属性是一样的,不要当成函数来调用。


在组件定义了2个输入框动态绑定了a和b
现在需要一个属性c=a+b

        <label for="a">a元素:</label>
        <input v-model="a" name="a"/>
        <label for="b">b元素:</label>
        <input v-model="b" name="b"/>
        <div>a+b = {{c}}</div>
        <div>list的和 = {{d}}</div>
    computed:{
        c(){
            return this.a+this.b;
        },
        d(){
          return this.list.reduce((sum,cur)=>sum+cur,0);
        }
    }

前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js

计算属性缓存 vs 方法

你可能已经注意到我们可以通过在表达式中调用方法来达到同样的效果:

        <div>list的和 = {{d}}</div>
        <div>list的和 = {{d}}</div>
        <div>list的和 = {{d}}</div>
        <div>list的和 = {{d}}</div>
        <HR>
        <div>list的和 = {{sum()}}</div>
        <div>list的和 = {{sum()}}</div>
        <div>list的和 = {{sum()}}</div>
        <div>list的和 = {{sum()}}</div>
    computed:{
        d(){
          return this.list.reduce((sum,cur)=>sum+cur,0);
        }
    },
    methods:{
        sum(){
            return this.list.reduce((sum,cur)=>sum+cur,0);
        }
    }

效果看起来是一样的。

前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

外面加上打印

    computed: {
        d() {
            console.log('computed')
            return this.list.reduce((sum, cur) => sum + cur, 0);
        }
    },
    methods: {
        sum() {
            console.log('methods')
            return this.list.reduce((sum, cur) => sum + cur, 0);
        }
    }

会发现computed只调用了一次,而method调用了多次。
相比之下,每当触发重新渲染时,调用method将总会再次执行函数。
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js

完整使用

计算属性默认只有 getter,不过在需要时你也可以提供一个 setter:
这个依据a和b设置c,而computed的完整板是可以通过修改c来设置a和b的。
如我想要a当c的十位,b当c的个位。修改c的时候,a和b也想要修改。就可以使用完整的computed来实现。

    computed: {
        c:{
            get(){
                return this.a * 10 + this.b;
            },
            set(c){
                this.a = parseInt(c/10);
                this.b = c % 10;
            }
        },
    },

这样就可以设置了。

watch 监听属性

介绍

作用:监听数据变化,执行一些业务逻辑

使用

    data() {
        return {
            a: 1,
            b: 2,
            c: 3,
            d: 4,
            e: {
                f: {
                    g: 5
                }
            }
        }
    },
    watch: {
        a: function (val, oldVal) {
            console.log('new: %s, old: %s', val, oldVal)
        },
        // 方法名
        b: 'someMethod',
        // 该回调会在任何被侦听的对象的 property 改变时被调用,不论其被嵌套多深
        c: {
            handler: function (val, oldVal) {
                console.log('new: %s, old: %s', val, oldVal)
            },
            deep: true
        },
        // 该回调将会在侦听开始之后被立即调用
        d: {
            handler: 'someMethod',
            immediate: true,
        },
        // 你可以传入回调数组,它们会被逐一调用
        e: [
            'someMethod',
            function handle2(val) {
                console.log('new: %s, old: %s', JSON.stringify(val))
            },
            {
                handler: function handle3(val, oldVal) {
                    console.log('new: %s, old: %s', val, JSON.stringify(oldVal))
                },
                handler4(val){
                    console.log(val)
                }
            }
        ],
        // 监听e.f的值 {g: 5}
        'e.f': {
            deep: true,
            handler:function (val, oldVal) {
                console.log('new: %s, old: %s', val, oldVal)
                console.log('new: %s, old: %s', val.g, oldVal.g)
            }
        },
    },
    methods:{
        someMethod(val, oldVal){
            console.log('new: %s, old: %s', val, oldVal)
        },
    }

首先我们可以看到,控制台执行了4
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js
这就是immediate的作用,会立即执行一次。
现在修改a,可以看到每次修改都会执行,但是我们很多时候也不需要11、112这2个状态,我们可以采用防抖处理。
其他的,之间修改e对象是会报错的。e也不适合用来展示。
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js

接下来修改e。会发现只执行了,“e.f"的监听,没有执行e的监听事件。
这是因为"e.f"的deep为true,其的嵌套属性也会被监听。
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js
e的演示直接借助vue开发工具进行修改
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js
可以看到e监听数组的函数都会被执行,然后就是简写方式,只接收一个新值。
前端学习---vue2--选项/数据--data-computed-watch-methods-props,前端,前端,学习,vue.js

methods

定义方法
如上面的

    methods:{
        someMethod(val, oldVal){
            console.log('new: %s, old: %s', val, oldVal)
        },
    }

在js调用中有像上面的,直接列举名字
当然这样不常见。

        b: 'someMethod',

常见的是在其他js中使用this.方法名调用方法。

如在其他方法中调用方法。

    methods:{
        someMethod(val, oldVal){
            console.log('new: %s, old: %s', val, oldVal)
        },
    },
    created() {
        this.someMethod();
    }

在模板中也可以调用方法。
绑定在事件上

<div @click="someMethod"></div>

props

props 可以是数组或对象,用于接收来自父组件的数据。
和data作用差不多,不同的是props专门接父组件的数据,具体在组件部分介绍。

需要设置类型,也可以设置默认值

    props: {
        flag: Boolean,
        msg: String,
        list: {
            type: Array,
            default: () => []
        },
        obj: {
            type: Object,
            default: () => ({})
        },
        num: {
            type: Number,
            default: 0
        },
    },

propsData

没用过文章来源地址https://www.toymoban.com/news/detail-630580.html

到了这里,关于前端学习---vue2--选项/数据--data-computed-watch-methods-props的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 探索vue2框架的世界:简述常用的vue2选项式API (二)

    parent.vue (父组件) child.vue (子组件) 子组件作为父组件和孙组件的传递中介,在儿子组件中给孙子组件添加v-bind=“$attrs”,这样孙子组件才能接收到数据 grandChild.vue (孙子组件) parent.vue 父组件 child.vue (子组件) 子组件作为父组件和孙组件的传递中介,在儿子组件中给孙子组件添

    2024年01月16日
    浏览(34)
  • Jeecg开发框架前端VUE2数据页面与后端数据库交互实现

    ​ JeecgBoot 是一款基于代码生成器的 低代码 开发平台,零代码开发!采用前后端分离架构:SpringBoot2.x,Ant DesignVue,Mybatis-plus,Shiro,JWT。强大的代码生成器让前后端代码一键生成,无需写任何代码! JeecgBoot引领新的开发模式(Online Coding模式- 代码生成器模式- 手工MERGE智能开发

    2024年02月11日
    浏览(44)
  • 天天用defineEmits宏函数,竟然不知道编译后是vue2的选项式API?

    我们每天都在使用 defineEmits 宏函数,但是你知道 defineEmits 宏函数经过编译后其实就是vue2的选项式API吗?通过回答下面两个问题,我将逐步为你揭秘 defineEmits 宏函数的神秘面纱。为什么 Vue 的 defineEmits 宏函数不需要 import 导入就可用?为什么 defineEmits 的返回值等同于 $emit  方

    2024年03月19日
    浏览(41)
  • 前端excel文件处理,vue2 、file-saver、xlsx, excel文件生成与excel文件链接数据导出

    安装插件 如使用TS开发,可安装file-saver的TypeScript类型定义 下载文件流 本地文件下载 文件下载(列宽自适应) 表格显示,每列列宽自适应 xlsx文件链接数据导出 方法调用

    2024年02月11日
    浏览(59)
  • 【Vue】前端级联选项的逻辑处理

    前端级联选项是指在一个选项的选择会影响到下一个选项的可用性或显示内容的情况。处理前端级联选项的逻辑通常涉及以下步骤: 1. 获取选项数据:首先,你需要获取所有级联选项的数据。这可以通过从服务器请求数据或在前端定义数据对象来完成。 2. 设置初始状态:根

    2024年02月08日
    浏览(42)
  • 前端vue2中axios封装请求数据,教会你封装教会你请求数据 简单易懂,轻松学会axios封装请求数据 看一眼就会 手把手教会

    2、完成上面的步骤还不够,还需要再创建一个文件夹api,然后在文件夹里面创建自定义的文件名(我创建的是cartApi.js)文件名根据自己的需求命名 下面就是根据自己的请求接口以及数据参数请求,下面的请求是一些常见的post、get请求以及传参啥的(仅供参考,可以参考下面

    2024年02月03日
    浏览(49)
  • 前端Vue自定义等宽标签栏标题栏选项卡

    前端组件化开发:以cc-chooseTab组件为例 随着技术的发展,开发的复杂度也越来越高。传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。为了解决这个问题,前端开发社区提

    2024年02月11日
    浏览(38)
  • 【前端vue面试】vue2

    computed 有缓存,基于响应式依赖数据(基于data中声明过或者父组件传递的props中的数据)发生改变,才会重新进行计算 数据变,直接会触发相应的操作 watch监听引用类型,需要添加deep:true深度监听,拿不到oldVal(旧值),因为新值和老值指针相同。 v-show 和v-if 都是做条件隐

    2024年02月08日
    浏览(39)
  • 【前端框架】Vue2合集

    1、Vue概念 vue 是一个用于构建用户界面的渐进式框架,由数据驱动 vue 的两种使用方式 vue 核心包开发:局部模块改造 vue 核心包与 vue 插件 工程化开发:整站 开发 2、 创建实例 1、准备容器 2、导包 3、创建Vue实例 4、指定配置项 = 渲染数据 3、插值表达式 插值表达式语法:

    2024年01月19日
    浏览(49)
  • 前端vue2 全局水印效果

    最近写项目遇到一个需求,全局显示水印,不管在哪个路由都要显示。 想要实现的效果: 新建shuiyin.js文件 main.js中全局注册

    2024年02月15日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包