当前位置: 首页 > article >正文

关于 API

关于 API

$set

问法:有没有遇到过数据更新了但视图没有更新的情况?

<template>
    <div>
        {{arr}}
        <button @click="btn"></button>
    </div>
</template>

<script>
export default {
    name:"Home"
    data(){
        return{
            arr:[0,1,2]
        }
    },
    methods: {
        btn(){
            // this.arr[1]="xxx"; // 这种改法,log 出来的数据改变了,但是视图上的数据没有改变
            this.$set(this.arr,1,'xxx') // 这种改法在 log 和试图上数据都改变了  三个参数分别是:操作对象、下标或者属性名、更改的值
            console.log(this.arr);
        }
    },
}
</script>

this.$set(target,key, 修改后的值)

$nextTick

this.$nextTick 返回的参数(函数)是一个异步的。
功能:获取更新后的 dom 。
源码:

$nextTick(callback){
    return Promise.resolve().then(()=>{
        callback();
    })
}

获取更新后的 dom 的两种方法:

  • 异步获取
  • (比如在 created 周期中)使用 Vue 中自带的 API ,this.$nextTick,其原理是返回一个 Promise.then() 的内容,让 callback 中的内容异步执行。

$refs

用来获取 dom 。

$el

获取当前组件的根节点。

$data

获取其当前组件的 data 数据。

$children

获取当前组件的全部子组件(以数组的形式返回)。

$parent

获取当前组件的父组件,如果找不到则返回自身。

$root

获取根组件。

data 定义数据

问法:Vue2 中数据是定义在 data 中的 return 里的,如果定义在 return 外有什么区别?

定义在 return 外的数据不能被修改,不会实现双向绑定,没有 gettersetter,而 return 内的数据会被 gettersetter 劫持,所以可以实现双向绑定。

但是如果同一个事件同时修改了 return 内和 return 外的两种数据,那么都将被修改。
这是因为双向绑定的数据被 gettersetter 劫持,通知 Vue 对象进行数据更新,所以 return 外的数据也得到了更新。

computed 计算属性

问法:通过 computed 计算属性获得的值可以修改吗?

可以,需要在计算属性中使用 gettersetter 的写法。
getter 中包含的是一般写法中的 return 语句。
setter 中传入一个要修改的值作为参数,包含的是将变量赋值给数据的操作。

export default {
    name: 'HomeView',
    data () {
        return {
            str: 'abc'
        }
    },
    computed: {
        // 这是一般的写法
        // changeStr (){
        //     return this.str.slice(-1)
        // }

        // 这是 getter 和 setter 的写法
        changeStr: {
            get(){
                return this.str.slice(-1)
            },
            set( val ){
                this.str = val,
            }
        }
    },
    methods: {
        btn() {
            this.str = 'xxxx';
            console.log( this.changeStr )
        }
    }
}

问法:当前 v-model 绑定的值是 computed 来的,那么可以修改吗?

可以,使用 gettersetter 写法就可以。

watch

    watch:{
        obj:{
            handler(oldVal, newVal) {
                console.log(oldVal, newVal)
            },
            immediate: true,
            deep: true
        },
        obj2 (oldVal, newVal) {
            console.log(oldVal, newVal)
        }
    }

methods 和 computed 的区别

computed 是有缓存机制的,而 methods 是没有缓存机制的(调用几次就执行几次)。


http://www.kler.cn/news/368753.html

相关文章:

  • 大语言模型参数传递、model 构建与tokenizer构建(基于llama3模型)
  • Vue笔记-element ui中关于table的前端分页
  • 全球知名度最高的华人起名大师颜廷利:世界顶级思想哲学教育家
  • [Python学习日记-57] 常用模块的练习(答案更新中)
  • Java线程安全
  • 虚拟现实在制造业中的应用
  • 【leetcode】动态规划
  • python+大数据+基于Hadoop的个性化图书推荐系统【内含源码+文档+部署教程】
  • 【我的创作纪念日1024】
  • 大数据-187 Elasticsearch - ELK 家族 Logstash Filter 插件 使用详解
  • APS开源源码解读: 排程工具 optaplanner II
  • Windows系统PyCharm右键运行.sh文件
  • Web API 哪家强?Axios、Fetch 和 HttpClient 优选指南
  • html5中获取元素的方法
  • 高效集成:聚水潭奇门至金蝶云星空的数据流自动化
  • Python爬虫-汽车投诉排行榜单数据
  • xss跨站及绕过与防护
  • Spring Boot 架构入门学习指南
  • NameNode的HA特性和基于ZKFC的自动故障转移机制
  • 前端浏览器知识总结
  • STM32 第18章 SysTick--系统定时器
  • kafka-console-ui的简介及安装使用
  • OceanMind海睿思受邀参加中国信通院2024数据要素发展大会
  • 使用 Spring Doc 为 Spring REST API 生成 OpenAPI 3.0 文档
  • Web做题思路
  • python实现数据库两个表之间的更新操作(模糊匹配)示例