Vue应用方法、实例属性、实例方法$refs、vm.$nextTick等

2023-10-27

应用方法、实例属性、实例方法

Vue 中对部分特殊的属性和功能方法进行特殊指代定义,用于提供独立的执行和
获取方式
应用方法
mount 所提供 DOM 元素的 innerHTML 将被替换为应用根组件的模板渲
染结果。
unmount 卸载应用实例的根组件
实例属性和方法(按照风格指南的建议, Vue 的实例属性和方法以统一规范以 $
开头)
vm.$el 描述当前 Vue 实例使用的根 DOM 元素。
vm.$data 描述当前 Vue 实例观察的数据对象。
vm.$options 构建当前 Vue 实例的初始化选项。
正则表达式的应用
全局配置方法的第一种配置方法
在vue的实例对象上可以通过 this 进行直接访问,也可以直接在模板中当做普通方法进行调用
例:手机号中间部分号码用星号代替书写的几种方法
 <div id="app">
        <h4>vue容器</h4>
        <!-- <p>msg.a:{{ msg.a }}</p> -->
        <!-- 第一种方式 -->
        <p>tel:{{ tel.replace(/(\d{3})\d{5}(\d{3})/,"$1*****$2") }}</p>
        <!-- 第二种方式 -->
        <p>tel:{{ getTel(tel) }}</p>
        <!-- 第三种方式 -->
        <p>tel:{{ $repalceStar(tel,"2-7-2") }}</p>
        <!-- 默认是 size="3-5-3" 模式-->
        <p>tel:{{ $repalceStar(tel) }}</p>
        <input type="button" value="打印全局方法" @click="printFun()">
    </div>
   
    <script type="module">
        import { createApp } from "../assets/vue/3.0/vue.esm-browser.js";
        let app = createApp({
            data() {
                return {
                    tel:"12345678911"
                }
            },
            methods: {
                getTel(tel){
                    return tel.replace(/(\d{3})\d{5}(\d{3})/,"$1*****$2");
                },
                printFun(){
                    console.log( this.$repalceStar );
        // ƒ repalceStar(tel="",size="3-5-3"){
            let rep = size.split("-");
            let reg = new RegExp( "(\\d{"+rep[0]+"})"+"\\d{"+rep[1]+"}"+" 
            (\\d{"+rep[2]+"})" )
            return tel.replace(r…
        //
                }
            },
        });
       
        // 全局化统一应用方法定义属性 => 实现为当前应用实例提供全局化的功能
        // 在vue的实例对象上可以通过 this 进行直接访问,也可以直接在模板中当做普通方法进行调用
        function repalceStar(tel="",size="3-5-3"){
            let rep = size.split("-");
            let reg = new RegExp( "(\\d{"+rep[0]+"})"+"\\d{"+rep[1]+"}"+" 
        (\\d{"+rep[2]+"})" )
            return tel.replace(reg,"$1"+("*".repeat(rep[1]))+"$2")
        }
       //全局配置方法的第一种配置方法
        app.config.globalProperties = {
            $repalceStar:repalceStar
        }
       //全局配置方法的第二种配置方法
        app.config.globalProperties.$repalceStar=repalceStar

        let vm = app.mount("#app"); // 挂载必须放在最后
       
    </script>

app.config. errorHandler 和 app.config.warnHandler 可以在项目开发完成后,对整个vue程序进行统一错误兜底

        // errorHandler 修改程序运行报错时的执行方法

        // errorHandler 修改程序运行报错时的执行方法

        // app.config.performance 控制调试工具的 性能记录 是否开启

   <div id="app">
        <h4>vue容器</h4>
        <p>msg.a:{{ msg.a }}</p>
   </div>
   <script type="module">
        import { createApp } from "../assets/vue/3.0/vue.esm-browser.js";
       // errorHandler 和 warnHandler 可以在项目开发完成后,对整个vue程序进行统一错误兜底
       // errorHandler 修改程序运行报错时的执行方法
         app.config.errorHandler = function(err,instance,info){
         console.error("程序运行失败")
         console.error(err)
         console.error(instance)
         console.error(info)
       }
       warnHandler 修改程序运行警告时的执行方法
       app.config.warnHandler = function(){}

      控制调试工具的 性能记录 是否开启
        app.config.performance = true;
   </script>

 $refs返回一个对象,记录当前Vue实例模板中,定义了ref属性的所有DOM 元素或者其它vue实例。(加载三方功能模块,多次重复使用同一个模板,对应同一个DOM元素(都具有相同的id或者class属性)只会加载一个,$refs的作用,防止产生冲突,保证DOM元素的唯一性

<div id="app">
        <input type="button" value="printRefs" @click="printRefs">
        <hr>
        <!-- vue为容器提供特殊属性 ref,表示指向关系 -->
        <div id="main" class="box" ref="echarts"></div>
        <input type="button" value="初始化echarts" @click="initEcharts()">
        <hr>
    </div>

    <script type="module">
        /*
            vm.$watch:构建一个对Vue实例中数据仓库中变量(data,computed)的监控方法
            vm.$refs:返回一个对象,记录当前Vue实例模板中,定义了ref属性的所有 DOM 元素或者其它vue实例。
            vm.$nextTick:等同于`nextTick` ,将执行函数体延迟到页面DOM更新完成后执行
            vm.$forceUpdate():迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。
        */
        import { createApp } from "../assets/vue/3.0/vue.esm-browser.js";
        // 基于vue进行项目功能构建时,如果需要加载三方功能模块,功能模块的构建的定义必须在vue的构建语法中进行处理
        //      需要经由上述描述完成操作,主要是因为vue在渲染容器时,只是以开发者定义标签作为参考结构生成新的DOM标签
        //      所以在页面运行过程中,同一个选择器可能会在vue创建前加载一个DOM对象,创建后加载另外一个DOM对象
        import * as echarts from '../assets/echarts/echarts.esm.js';

        createApp({
            data() {
                return {
                    options: {
                        title: {
                            text: 'ECharts 入门示例'
                        },
                        tooltip: {},
                        xAxis: {
                            data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
                        },
                        yAxis: {},
                        series: [
                            {
                                name: '销量',
                                type: 'bar',
                                data: [5, 20, 36, 10, 10, 20]
                            }
                        ]
                    }
                }
            },
            methods: {
                printRefs() {
                    console.log(this.$refs);
                },
                initEcharts() {
                    // 基于准备好的dom,初始化echarts实例
                    var myChart = echarts.init(this.$refs.echarts);
                    // 绘制图表
                    myChart.setOption(this.options);
                }
            },
        }).mount("#app")
    </script>
vm.$watch 构建一个对 Vue 实例中数据仓库中变量( data computed)的监控方法
vm.$nextTick 等同于 Vue.nextTick ,将执行函数体延迟到页面 DOM更新完成后执行
          => vue3 的nextTick 方法会返回一个promise对象,当监听到DOM更新完成后,状态会更新 为fulfilled

 问题1:nextTick的作用是什么?

                    将执行函数体延迟到页面DOM更新完成后执行

                问题2:对什么进行延迟?

                    nextTick 方法上最近的响应式变量被修改后的 0,对应DOM的更新

 <link rel="stylesheet" href="../assets/swiper/css/swiper.min.css">
    <script src="../assets/swiper/js/swiper.min.js"></script>
    <style>
        body {
            padding-bottom: 800px;
        }

        .box {
            width: 500px;
            height: 400px;
            border: 1px solid black;
        }
        .swiper-slide{
            height: 300px;
        }
        .swiper-slide:nth-child(1){
            background-color: #4390ee;
        }
        .swiper-slide:nth-child(2){
            background-color: #ca4040;
        }
        .swiper-slide:nth-child(3){
            background-color: #ff8604;
        }
        .swiper-slide:nth-child(4){
            background-color: palevioletred;
        }
        .swiper-slide:nth-child(5){
            background-color: yellowgreen;
        }
    </style>
</head>

<body>
    <div id="app">
        <hr>
        <div class="swiper-container" ref="loop">
            <div class="swiper-wrapper">
                <!-- <div class="swiper-slide">slider1</div>
                <div class="swiper-slide">slider2</div>
                <div class="swiper-slide">slider3</div> -->
                <div class="swiper-slide" v-for="item in arr">slider{{ item }}</div>
            </div>
        </div>
        <hr>
        <input type="button" value="initSwiper" @click="initSwiper()">
        <hr>
        <p>$info:{{ $info }}</p>
        <input type="button" value="$info='新info'" @click="setInfo()">
    </div>

    <script type="module">
        /*
            vm.$nextTick:等同于 nextTick ,将执行函数体延迟到页面DOM更新完成后执行
                    => vue3 的nextTick 方法会返回一个promise对象,当监听到DOM更新完成后,状态会更新为fulfilled

                问题1:nextTick的作用是什么?
                    将执行函数体延迟到页面DOM更新完成后执行
                问题2:对什么进行延迟?
                    nextTick 方法上最近的响应式变量被修改后的 0,对应DOM的更新

            vm.$forceUpdate():迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。
        */
        import { createApp, nextTick } from "../assets/vue/3.0/vue.esm-browser.js";
        let app = createApp({
            data() {
                return {
                    // arr:[1,2,3,4,5]
                    arr:[]
                }
            },
            methods: {
         // 第一种方法 vm.$nextTick,模块引用中不用引用
               initSwiper(){
                    // 异步数据请求
            this.arr = [1,2,3,4,5]
          // vue程序中,完成数据仓库的数据写入到页面对应标签的重新渲染完成时需要执行代码的时间的
          // vue在设计DOM重新渲染时,为了保证页面不受渲染影响,采用了异步渲染的方案

              this.$nextTick(()=>{
                     new Swiper(this.$refs.loop, {
                     autoplay: 5000,//可选选项,自动滑动
                      })
               })

             
                // }
              initSwiper() {
              this.arr = [1, 2, 3, 4, 5]
           // 此方法是 import { createApp,nextTick } from "../assets/vue3.0/vue.esm- 
              browser.js" 引用js模块自带并解构出来的方法
              nextTick(()=>{
               new Swiper(this.$refs.loop, {
                 autoplay: 5000,//可选选项,自动滑动
               })
                 })
           },
          // 第三种 vue3 的nextTick 方法
                async initSwiper(){
                    this.arr = [1,2,3,4,5]

                    await nextTick()

                    new Swiper(this.$refs.loop, {
                        autoplay: 5000,//可选选项,自动滑动
                    })
                },
                setInfo(){
                    this.$info = "新info";
                    console.log(this.$info);
                    this.$forceUpdate()
                }
            },
        })
        
        app.config.globalProperties.$info = "info";

        app.mount("#app")
    </script>
</body>
vm.$forceUpdate 迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。
    <div id="app">
        <p>$info:{{ $info }}</p>
        <input type="button" value="$info='新info'" @click="setInfo()">
    </div>
    <script type="module">  
        import { createApp} from "../assets/vue/3.0/vue.esm-browser.js";
        let app = createApp({
            data() {
                return {
                  
                }
            },
            methods: {  
                setInfo(){
                    this.$info = "新info";
                    console.log(this.$info);
                    this.$forceUpdate()
                }
            },
        })
        
        app.config.globalProperties.$info = "info";

        app.mount("#app")
    </script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue应用方法、实例属性、实例方法$refs、vm.$nextTick等 的相关文章

随机推荐

  • 微服务学习资料(持续更新)

    文章目录 微服务学习资料 持续更新 微服务介绍 微服务架构模式 从单体架构到微服务架构 绞杀者模式 微服务API设计 微服务安全 认证与鉴权 微服务数据架构 微服务事务管理 CAP理论 分布式事务 Saga模式 服务网格 服务版本管理 架构
  • Tensorflow导入报"Failed to load the native TensorFlow runtime."解决方案

    问题描述 在ubuntu服务器端测试import tensorflow 导入正常 但是使用pycharm远程访问连接使用pycharm时 出现tensorflow环境出现问题 为什么 这和之前在服务器安装过程中导入pycharm出错的原因一
  • 【自监督学习】 MAE阅读笔记

    1 MAE Masked Autoencoders Are Scalable Vision Learners bert ViT MAE的主要目的是进行迁移学习的预训练 1 Abstract 随即盖住一些图片中的块 patches 并重建被盖
  • 解析创客教育活动所需的空间实践场

    创客教育不同于创客活动 如果只是以活动或竞赛的形式在学校里分发 那只是一种创客活动 并没有真正融入教育 在发展过程中 会出现过度的偏执和做事 或者过度的偏执学习 如何找到平衡是学校教育者的重要一环 创客教育 培养学生创新所需要的知识 能力和
  • 聊一聊Linux下进程隐藏的常见手法及侦测手段

    0x00 前言 进程隐藏是恶意软件隐藏自身痕迹逃避系统管理人员发现的常用伎俩之一 当然 安全防护人员有时候也会使用到 比如隐藏蜜罐中的监控进程而不被入侵者觉察等 笔者也曾在多次安全应急响应经历中遇到过多各式各样的进程隐藏伎俩 了解进程隐藏的
  • 【问题解决】Centos7 yum命令异常报错Could not retrieve mirrorlist http://mirrorlist.centos.org

    问题出现 在把虚拟机的ip改为静态ip之后 yum install就会出现这样子的问题 root etcd yum install y wget 已加载插件 fastestmirror Determining fastest mirrors
  • 01rapidJson学习之rapidJson的初始化

    01rapidJson学习之rapidJson的初始化 1 rapidJson的初始化 由于我们经常通过初始化添加值到string字符串中 所以这里封装成一个简单函数 rapidJson有3种初始化方式 1 改造初始化 2 set方法初始化
  • unity安卓so包与其他第三方so包冲突问题 Unable to find main / No implementation found for

    最近公司项目需要 在安卓端使用了视频直播的第三方包和unity的第三方包 问题来了 引用了视频直播的包之后 unity的嵌入程序启动会报错 Process e unitry3d PID 30302 java lang Unsatisfied
  • Linux用户与群组管理

    用户账户与群组概念 Linux操作系统是多用户多任务的操作系统 系统依据账户来区分属于每个用户的文件 进程 任务 并给每个用户提供特定的工作环境 例如 用户的工作目录 shell版本以及图形化的环境配置等 Linux系统下的用户分为三种 1
  • Centos7 离线安装kafka

    Centos7 离线安装kafka 1 准备 1 提前下载kafka与jdk rpm包 2 开始 1 将rpm包导入到服务器 2 执行 rpm ivh kafka 1 1 1 20200608 x86 64 rpm 下载 https dow
  • 华为OD机试-喊7游戏

    题目描述 喊7 是一个传统的聚会游戏 N个人围成一圈 按顺时针从1 7编号 编号为1的人从1开始喊数 下一个人喊得数字是上一个人喊得数字 1 但是当将要喊出数字7的倍数或者含有7的话 不能喊出 而是要喊过 假定N个人都没有失误 当喊道数字k
  • IDEA 编译时 报 “常量字符串过长” 解决办法

    在编译项目时 出现错误为 常量字符串过长 java constant string too long 解决 File gt gt Settings gt gt Build Execution Deployment gt gt Compile
  • @font-face 加载字体引用字体之后不起作用

    如题 最近在学习css的时候遇到如下情况 使用 font face加载多种字体不起作用 反思 是我搞错了 字体加载可能就是要一条一条的写 文件结构目录 代码如下
  • Android 报错:Call requires API level 26/设置SDK最小的版本

    报错如下图所示 我尝试了升级Android Studio 到新版本 报错仍然存在 原因是某些控件仅仅支持一些较高SDK的版本 所以修改模块的gradle文件的SDK的最小版本 改完之后报错消失 备注 SDK Software Develop
  • in和=无法查出为NULL的值

    select from base persons x where x pname in null select from base persons x where x pname null 以上两句查询结果为空 虽然表里有相应的值 Id N
  • PAT 1152 Google Recruitment

    原题链接 1152 Google Recruitment 20分 题意 从任一给定的长度为 L 的数字中 找出最早出现的 K 位连续数字所组成的素数 关键词 字符串 判断质数 输入格式 输入在第一行给出 2 个正整数 分别是 L 和 K 接
  • python机器学习之数据的预处理(五种方式数据处理案例详解)

    数据的预处理 数据下载地址 gt 点这里下载 到入文件时可以直接复制地址然后用r 包裹起来 例如 data pd read cav r C work data csv 或者也可以以直接将 换成 也可以导入 1 归一化 在sklearn当中
  • Nginx四层代理和7层反向代理

    Nginx四层代理和7层反向代理 文章目录 Nginx四层代理和7层反向代理 Nginx四层代理配置 Nginx四层代理配置步骤 配置好两台Nginx七层代理服务器 在四层代理的Nginx服务器上做相关配置 测试结果 Nginx四层代理配置
  • vscode设置选项卡换行

    ctrl shift p打开命令输入窗口 输入preference 选择打开工作区设置 输入wrap tabs 勾选wrap tabs 可以多行显示了
  • Vue应用方法、实例属性、实例方法$refs、vm.$nextTick等

    应用方法 实例属性 实例方法 Vue 中对部分特殊的属性和功能方法进行特殊指代定义 用于提供独立的执行和 获取方式 应用方法 mount 所提供 DOM 元素的 innerHTML 将被替换为应用根组件的模板渲 染结果 unmount 卸载