首页 > 其他分享 >vue3 基础-插件 plugin 案例演示

vue3 基础-插件 plugin 案例演示

时间:2022-10-04 17:55:36浏览次数:48  
标签:插件 const name plugin age check vue3 app

前篇有介绍关于插件 plugin 的无敌强大和基本使用流程后, 当时从俺的经验上看是没咋去使用它的, 即英雄无用武之地. 本篇也是从网上找个案例来为 plugin 的强大来小试牛刀啦.

假设我们要做一个关于对数据做一个校验的插件. 假设我们先用 mixin 的方式来实现的话, 写法如下:

<!DOCTYPE html>
<html lang="en">

<head>
  <title>mixin 数据校验</title>
  <script src="https://unpkg.com/vue@3"></script>
</head>

<body>
  <div id="root"></div>
  <script>
    const app = Vue.createApp({
      data() {
        return { name: 'youge', age: 18 }
      },
      // 自定义一种语法, 比如叫 check
      check: {
        age: {
          validate: age => age >= 18,
          message: 'hi main, biu biu biu'
        }
      },
      template: `<div>name: {{name}}, age: {{age}}</div>`
    })

    app.mixin({
      created() {
        // console.log(this.$options.check)
        for (key in this.$options.check) {
          const item = this.$options.check[key]
          this.$watch(key, (value) => {
            const ret = item.validate(value)
            if (!ret) console.log(item.message)
          })
        }
      }
    })


    const vm = app.mount('#root')

  </script>
</body>

</html>

虽然这样是能够通过 mixin 来实现, 但考虑更多的扩展性, 和让代理结构更加清晰和具有语义化和模块化的特点呢,咱还是建议用 plugin 的写法啦.

<!DOCTYPE html>
<html lang="en">

<head>
  <title>plugin 数据校验</title>
  <script src="https://unpkg.com/vue@3"></script>
</head>

<body>
  <div id="root"></div>
  <script>
    const app = Vue.createApp({
      data() {
        return { name: 'youge', age: 18 }
      },
      // 自定义一种语法, 比如叫 check
      check: {
        age: {
          validate: age => age > 18,
          message: 'hi main, biu biu biu'
        },
        name: {
          validate: name => name.length >= 8,
          message: 'name do do do bala bala'
        }
      },
      template: `<div>name: {{name}}, age: {{age}}</div>`
    })

    // 通过插件的写法
    const checkPlugin = (app, options) => {
      app.mixin({
        created() {
          for (let key in this.$options.check) {
            const item = this.$options.check[key]
            this.$watch(key, (value) => {
              const ret = item.validate(value)
              if (!ret) console.log(item.message)
            })
          }
        }
      })
    }

    // 使用插件
    app.use(checkPlugin)


    const vm = app.mount('#root')

  </script>
</body>

</html>

如此这般操作, 今后涉及的各种 vue 的扩展都能优先考虑用 plugin 来作为一个 "处理容器" 的作用啦, 它因为能获取到 app 和 options 嘛, 就理论上有无限扩充的可能性哦.

标签:插件,const,name,plugin,age,check,vue3,app
From: https://www.cnblogs.com/chenjieyouge/p/16754136.html

相关文章

  • vscode插件REST Client,替代postman
    如果只是简单的请求工作的话,这个插件也许跟方便使用方式准备工作安装该插件创建一个test.http(名字随意,后缀.http)文件朴素的请求后面必须有协议版本号HTTP/1.1......
  • jmeter plugin manager安装插件
    以websocket插件为例先安装pluginmanger  第二步:打开jmetre options manager勾选并apply会自动重启jmeter  检验插件安装:add-->smapler   ......
  • jemter-plugins-maven dependency -WIiki用法配置介绍
    1、先介绍下jmeter的maven中央仓库地址,有兴趣自己看下​​https://mvnrepository.com/artifact/org.apache.jmeter​​2.Wikigithub项目介绍:项目地址:​​https://github.c......
  • 一些js 插件的作用
    前言:从一些开源网站上下载下来的后台管理系统模板一般会有很多的js,其js的功能是什么呢?这里随手查询了一下,记录下来正文:1.zDialog.js各种弹窗插件详细案例:​​​http:......
  • nonebot2 使用 nonebot_plugin_gocqhttp 插件如何升级gocq
    在使用nonebot_plugin_gocqhttp这个插件一段时候后发现需要升级gocq这里给出了升级方法的说明:0.需要下载最新gocqhttp版本1.在nonebot2的accounts文件夹中替换旧的.exe......
  • MybatisPlus学习之MyBatisX插件比代码生成器还好用的哦2
    MyBatis-Plus为我们提供了强大的mapper和service模板,能够大大的提高开发效率但是在真正开发过程中,MyBatis-Plus并不能为我们解决所有问题,例如一些复杂的SQL,多表联查,我们就需......
  • uniapp + vue3糖果语法实现瀑布流商品列表
    目录效果思路实现先将列表分为两个HTML中使用左右列表进行显示完整代码效果思路瀑布流其实就是将放放商品信息列表展示的view分为了左右两个部分,然后固定了两个部分的......
  • 源码角度了解Skywalking之AbstractClassEnhancePluginDefine插件增强定义
    源码角度了解Skywalking之AbstractClassEnhancePluginDefine插件增强定义AbstractClassEnhancePluginDefine是所有插件的抽象类,我们在分析Skywalking初始化流程的时候见到......
  • 源码角度了解Skywalking之ClassEnhancePluginDefine拦截构造方法和类实例方法
    源码角度了解Skywalking之ClassEnhancePluginDefine拦截构造方法和类实例方法上篇文章我们分析到ClassEnhancePluginDefine的拦截静态方法进行增强,而Skywalking初始化的时......
  • 浅谈 Golang 插件机制
    我们知道类似Java等半编译半解释型语言编译生成的都是类似中间态的字节码,所以在Java里面我们想要实现程序工作的动态扩展,可以通过Java的字节码编辑技术([[动态代理#A......