Vue2进阶之Vue2高级用法

news2024/9/27 17:34:13

Vue2高级用法

  • mixin
    • 示例一
    • 示例二
  • plugin插件
  • 自定义指令
    • vue-element-admin
  • slot插槽
  • filter过滤器

mixin

示例一

App.vue

<template>
  <div id="app">
  </div>
</template>

<script>
const mixin2={
  created(){
    console.log("mixin created");
  }
}


export default {
  name: 'App',
  mixins:[mixin2],
  data(){
    return {
      message:"inner Hello world"
    }
  },
  created(){
    console.log("inner created");
  }
}
</script>

<style>
</style>

main.js

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

const mixin1={
  created:function(){
    console.log("global created");
    console.log("message",this.$data.message);
  }
}

Vue.mixin(mixin1)

new Vue({
  render: h => h(App),
}).$mount('#app')

请添加图片描述

示例二

App.vue

<template>
  <div id="app">
  </div>
</template>

<script>
const mixin2={
  created(){
    // console.log("mixin created");
  },
  data(){
    return {
      message:"mixin message"
    }
  }
}


export default {
  name: 'App',
  mixins:[mixin2],
  data(){
    return {
      message:"inner message"
    }
  },
  created(){
    // console.log("inner created");
  }
}
</script>

<style>
</style>

main.js

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

const mixin1={
  created:function(){
    // console.log("global created");
    console.log("message",this.$data.message);
  },
  data(){
    return{
      message:"global message"
    }
  }
}

Vue.mixin(mixin1)

new Vue({
  render: h => h(App),
}).$mount('#app')

请添加图片描述
global注入到new Vue实例上,然后在App.vue的实例中执行自己当前的data

与Vue实例执行顺序有关,先进行当前实例化声明(全局注入),然后再实例化声明的时候注入我们内部的mixin,是外部的的global更高一点

  • 面试题:如果我们不想使用global进行注入的话,我们应该怎么做?(在Vue2中,除了mixin之外的话,如果不希望导致全局影响,还有什么方法避免这种问题?)
    使用插件,插件化可以解决全局注入的问题

plugin插件

像Vue-router、Vuex等也是插件,通过插件注入进去的
Vue-router
Vue-router关于插件的内容
Vuex

  • 如果要找源码的入口,可以找package.json中对应的入口
    [Vuex的package.json请添加图片描述

请添加图片描述
install的方法,将全部内容挂载到Vue的构造函数上,通过use方法挂载到Vue实例上

插件列表

自定义指令

全局中定义
在这里插入图片描述
局部中定义:
在这里插入图片描述

  • bind:初始化调用
  • unbind:解绑调用
  • inserted:指定对应的元素->绑定到父节点的时候

App.vue:

<template>
  <div>
   <!-- foo.a.b 这里的.a,.b是修饰符,不是属性的意思,modifiers是对象,所以先后顺序无所谓 -->
    <div id="hook-arguments-example" v-demo:foo.a.b="message"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'hello!'
    }
  },
  directives:{
    demo:{
            bind: function (el, binding, vnode) {
                var s = JSON.stringify
                el.innerHTML =
                'name: '       + s(binding.name) + '<br>' +
                'value: '      + s(binding.value) + '<br>' +
                'expression: ' + s(binding.expression) + '<br>' +
                'argument: '   + s(binding.arg) + '<br>' +
                'modifiers: '  + s(binding.modifiers) + '<br>' +
                'vnode keys: ' + Object.keys(vnode).join(', ')
                console.log("vnode",vnode);
            }
        }
  }
}
</script>

<style scoped>
</style>

在这里插入图片描述

vue-element-admin

权限验证:v-permission

插件化的方式注入的
在这里插入图片描述
指令实现的功能:
在这里插入图片描述

const checkPermission=(el,binding)=>{
    const {value}=binding  
    if(value instanceof Array){
        if(!value.length){
           //没有内容就用父节点删除子节点
            el.parentNode.removeChild(el)
        }
        const roles=store.rule; //当前用户的权限
        //查找是否有权限
        const hasPermission=roles.some(role=>value.includes(role))
        //没有权限就删除
        if(!hasPermission){
            el.parentNode.removeChild(el)
        }
    }else{
        throw new Error("type error")
    }
}


Vue.directives('permission',{
    inserted(el,binding){
        checkPermission(el,binding)
    },
    update(el,binding){
        checkPermission(el,binding)
    }
})

Google搜索东西举例:github awesome vue directive 在源代码中寻找

slot插槽

v-slot:基于web components衍生出来的
就当做占位符来看待
作用域插槽已经废弃了

filter过滤器

<template>
  <div>
    {{ time|timeFormat }}
  </div>
</template>

<script>
import dayjs from 'dayjs'
export default {
  data() {
    return {
        time:1713401633460
    }
  },
  filters:{
    timeFormat(value,str="YYYY-MM-DD HH:mm:ss"){
        return dayjs(value).format(str)
    }
  }
}
</script>

<style scoped>
</style>

在这里插入图片描述
要求:1.Vue官网自己过一遍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1615313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySql 安装教程+简单的建表

目录 1.安装准备 1.MySQL官方网站下载 2.安装步骤 3.测试安装 4.简单的建表 1.安装准备 1.MySQL官方网站下载 下载安装包或者压缩包都可以 选择相应版本&#xff0c;点击Download开始通过网页下载到本地&#xff08;压缩包下载快一些&#xff09; 2.安装步骤 双击此.exe…

c++ - 类与对象 - explicit关键字 | static成员 | 友元 | 内部类 | 匿名对象

文章目录 一、 explicit关键字二、static成员三、友元四、内部类五、匿名对象 一、 explicit关键字 1、隐式类型转换 再进行隐式类型转换是会产生一个临时变量tmp,再用临时变量进行赋值。 如&#xff1a; double d 1.2; //再用 d 给 i 进行赋值时&#xff0c;会进行隐式类型…

面向对象设计与分析40讲(25)中介模式、代理模式、门面模式、桥接模式、适配器模式

文章目录 门面模式代理模式中介模式 之所以把这几个模式放到一起写&#xff0c;是因为它们的界限比较模糊&#xff0c;结构上没有明显的差别&#xff0c;差别只是语义上。 这几种模式在结构上都类似&#xff1a; 代理将原本A–>C的直接调用变成&#xff1a; A–>B–>…

探索RadSystems:低代码开发的新选择(二)

系列文章目录 探索RadSystems&#xff1a;低代码开发的新选择&#xff08;一&#xff09;&#x1f6aa; 文章目录 系列文章目录前言一、RadSystems Studio是什么&#xff1f;二、用户认证三、系统角色许可四、用户记录管理五、时间戳记录总结 前言 在数字化时代&#xff0c;低…

HoloLens2的Unity应用在电脑上发布成安装包,然后通过wifi安装到设备

一、VS工程中的鼠标右键 二、发布——>创建应用程序包 三、选择【旁加载】 四、选择签名方法&#xff1a; 五、选择和配置包 六、创建完毕 七、网络连接设备 八、登录设备 九、安装app

基于springboot实现的摄影跟拍预定管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

OpenHarmony实战开发-合理选择条件渲染和显隐控制。

开发者可以通过条件渲染或显隐控制两种方式来实现组件在显示和隐藏间的切换。本文从两者原理机制的区别出发&#xff0c;对二者适用场景分别进行说明&#xff0c;实现相应适用场景的示例并给出性能对比数据。 原理机制 条件渲染 if/else条件渲染是ArkUI应用开发框架提供的渲…

实现Spring底层机制(阶段1—编写自己的Spring容器,扫描包,得到bean的Class对象)

环境搭建抛出问题 1.环境搭建 1.创建maven项目 2.导入依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.ap…

RK3568 学习笔记 : u-boot 通过 tftp 网络更新 u-boot自身

前言 开发板型号&#xff1a; 【正点原子】 的 RK3568 开发板 AtomPi-CA1 使用 虚拟机 ubuntu 20.04 收到单独 编译 RK3568 u-boot 使用 rockchip Linux 内核的设备树 【替换】 u-boot 下的 rk3568 开发板设备树文件&#xff0c;解决 u-boot 下千兆网卡设备能识别但是无法 Pi…

MQTT服务器EMQX的安装和使用(Windows)

一、下载地址&#xff1a; 下载 EMQX 二、安装环境&#xff1a; Windows Server2016 16G 500G 三、启动服务&#xff1a; 下载文件解压后放入以下目录&#xff08;注意&#xff0c;目录名一定是英文&#xff0c;否则会造成启动不成功&#xff01;&#xff09;&#xff1a…

Linux部署Coturn以及关于打洞的思考

目录 Coturn介绍部署架构图 2.1 局域网——无NAT映射 2.2 NAT网Corturn安装步骤验证 4.1 局域网——无NAT映射 4.2 NAT网 4.2.1 Cywin安装步骤 4.2.2 Coturn安装步骤 4.2.3 验证引言 下文部署架构图为Corturn为解决互联网NAT环境下“找朋友”的部署架构,也是Coturn发挥其价值…

C# 给图片添加文字水印

目录 应用场景 开发运行环境 方法说明 方法代码 调用示例 小结 应用场景 在某些应用项目&#xff08;如电子档案信息管理&#xff09;中&#xff0c;查看电子图片信息是经常使用到的功能&#xff0c;此时我们就需要给显示在浏览器中的图片添加文字水印版权或提示信息。…

Oracle EBS Interface/API(54)- GL日记账审批

背景: 客户化创建薪酬凭证或者银企付款入账日记账以后,用户希望自动提交审批流程,无需到系统标准功能点击审批,减少用户操作。 快速参考 参考点内容功能导航N: GL->日记账->输入并发请求None基表GL.GL_JE_BATCHESAPI参考下面介绍错误信息表None接口FormNone接口Reque…

PLSQL数据库

目录 什么是PLSQL数据库 PL数据库的实现方法 PL数据库的基本语法 1.作用 2.语法 3.赋值输出 4.引用 5.异常处理 6.if 判断 7.loop循环 8.while循环 9.for循环 10.游标 11.参数游标 12.索引 13.分区表 什么是PLSQL数据库 PL/SQL&#xff08;Procedure Language/…

mysql虚拟列问题

1&#xff0c;虚拟列的用途 1.1&#xff0c;虚拟列可以在创建表时定义&#xff0c;并在查询时像普通列一样使用&#xff1b;方便查询数据&#xff1b;比如从复杂的列数据中&#xff0c;解析taskID&#xff0c;使用虚拟列就很方便&#xff1b; 1.2&#xff0c;mapvalue是txt类…

查理·芒格的 100 个思维模型是什么?一文弄懂多元思维模型!

查理芒格&#xff0c;全名查尔斯托马斯芒格&#xff0c;是一位美国投资者、商业人士以及慈善家。他最为人所知的身份是作为伯克希尔哈撒韦公司的副主席&#xff0c;与投资大师沃伦巴菲特共同塑造了该公司的投资风格和成功。芒格以其深厚的智慧、跨学科的思考方式和独到的价值投…

vivado 使用波形 ILA 触发器和导出功能

使用波形 ILA 触发器和导出功能 • 启用自动重新触发 &#xff1a; 选中“ Waveform ”窗口工具栏上的“启用自动重新触发 (Enable Auto Re-Trigger) ”按钮即可在 成功完成触发 上传 显示操作后 &#xff0c; 启用 Vivado IDE 以自动重新装备与“ Waveform ”窗口触发器…

自动化软件测试用例,自动化测试用例设计

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

书生·浦语大模型第二期实战营(5)笔记

大模型部署简介 难点 大模型部署的方法 LMDeploy 实践 安装 studio-conda -t lmdeploy -o pytorch-2.1.2conda activate lmdeploypip install lmdeploy[all]0.3.0模型 ls /root/share/new_models/Shanghai_AI_Laboratory/ln -s /root/share/new_models/Shanghai_AI_Laborato…

浏览器不兼容的问题和通用解决方案

大家好&#xff0c;我是咕噜铁蛋&#xff0c;今天我想和大家聊聊一个在我们日常上网过程中经常遇到的问题——浏览器不兼容。这个问题看似微小&#xff0c;但却常常让我们在浏览网页、使用在线应用时感到困扰。接下来&#xff0c;我将详细分析浏览器不兼容的原因&#xff0c;并…