Vue2进阶之Vue2高级用法

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官网自己过一遍

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

美团财务科技后端一面:如何保证数据一致性?延时双删第二次失败如何解决?

更多大厂面试内容可见 -> http://11come.cn 美团财务科技后端一面&#xff1a;项目内容拷打 美团财务科技后端一面&#xff1a;项目相关面试题&#xff0c;主要包含 Zset、延时双删失败重试、热点数据解决、ThreadLocal 这几个方面相关的内容 由于前几个问题是对个人项目的…

展览展会媒体媒体邀约执行应该怎么做?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 展览展会邀请媒体跟其他活动邀请媒体流程大致相同&#xff0c;包括 制定媒体邀约计划&#xff0c;准备新闻稿&#xff0c;发送邀请函&#xff0c;确认媒体参会&#xff0c;现场媒体接待及…

神经网络中正则化和正则化率的含义

在神经网络中&#xff0c;正则化是一种用于防止模型过拟合的技术。过拟合是指模型在训练数据上表现得很好&#xff0c;但是对于未见过的新数据&#xff0c;其泛化能力却很差。正则化通过在损失函数中添加一个额外的项来惩罚模型的复杂度&#xff0c;从而鼓励模型学习更加简单、…

OpenHarmony UI动画-lottie

简介 lottie是一个适用于OpenHarmony的动画库&#xff0c;它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画&#xff0c;并在移动设备上进行本地渲染。 下载安裝 ohpm install ohos/lottieOpenHarmony ohpm 环境配置等更多内容&#xff0c;请参考如何…

浅写个登录(无js文件)

全部代码如下&#xff0c;无需编写wxss文件&#xff0c;渲染都在style里面&#xff1a; <view style"height: 250rpx;width: 100%;"> <!-- 背景图片 --><view style"position: absolute; background-color: antiquewhite; height: 250rpx;width…

Java学习-Module的概念和使用、IDEA的常用设置及常用快捷键

Module的概念和使用 【1】在Eclipse中我们有Workspace (工作空间)和Project (工程)的概念&#xff0c;在IDEA中只有Project (工程)和Module (模块)的概念。 这里的对应关系为: IDEA官网说明: An Eclipse workspace is similar to a project in IntelliJ IDEA An Eclipse pr…

2、MATLAB入门常用命令

一、退出和中断 exit和quit&#xff1a;结束MATLAB会话。程序完成&#xff0c;如果没有明确保存&#xff0c;则变量中的数据丢失。 Ctrl c&#xff1a;中断一个MATLAB任务。例如&#xff0c;当MATLAB正在计算或打印时&#xff0c;中断一个任务&#xff0c;但会话并没有结束。…

TensorFlow 1.x的学习

.为什么还有很多人都选择使用TensorFlow 1.x 兼容性问题: TensorFlow 1.x在一些旧项目中已经得到了广泛应用&#xff0c;这些项目可能依赖于1.x版本的特定API或行为。升级到2.x可能需要大量的代码修改和测试工作&#xff0c;对于一些已经稳定运行的项目&#xff0c;维护者可能…

【观察】容器化部署“再简化”,云原生体验“再升级”

自2013年云原生概念被提出以来&#xff0c;云原生技术和架构在过去十多年得到了迅速的发展&#xff0c;并对数字基础设施、应用架构和应用构建模式带来了深刻的变革。根据IDC预测&#xff0c;到2024年&#xff0c;新增的生产级云原生应用在新应用的占比将从2020年的10%增加到60…

HTML5+JavaScript实现本地视频/音频播放器

HTML5JavaScript实现本地视频/音频播放器 HTML5 提供了本地视频和音频播放器的支持&#xff0c;通过 <video> 和 <audio> 标签&#xff0c;这些标签支持多种媒体格式&#xff0c;并且可以通过 JavaScript 进行控制&#xff0c;实现功能比较完整的本地视频音频播放器…

车载终端丨车载平板丨车载平板电脑丨提升车队管理水平

随着电商、互联网和智能制造等行业的快速发展&#xff0c;物流需求不断增加&#xff0c;车载终端作为物流企业管理的重要工具&#xff0c;具有广泛的市场需求。车载平板是一种集成了计算机和显示屏的设备&#xff0c;可以用于车辆管理、车队调度、运输监控等方面&#xff0c;可…

探索Java世界中的七大排序算法(上)

文章目录 排序的概念直接插入排序希尔排序( 缩小增量排序)选择排序堆排序冒泡排序 在计算机科学中&#xff0c;排序算法是一类重要的算法&#xff0c;它们用于将一组元素按照一定的顺序进行排列。在Java编程中&#xff0c;我们经常需要对数组或集合进行排序操作。本文将介绍Jav…

React Ant Design 简单实现如何选中图片

效果&#xff1a; 代码&#xff1a; 定义的初始值和方法 const [selected, setSelected] useState(0); // 表示当前选中的图片索引const handleClick (index) > {if (selected index) {setSelected(null); // 如果点击的是已选中的图片&#xff0c;则取消选中状态} else…

单节锂离子/锂聚合物电池保护IC SDG3JX

SDG3JX内置高精度电压检测电路和延迟电路&#xff0c;适用于锂离子/锂聚合物可充电电池的保护IC。SDG3JX 最适合于对单节锂离子/锂聚合物可充电电池组的过充电、过放电和过电流的保护。 特点  内置高精度电压检测电路 * 过充电检测电压:4.28V0.025V&#xff1b; * 过充电解除…

小例子Flask网站开发—Cookies(四)

Cookies是服务器保存在用户浏览器端的数据片段&#xff0c;用于跟踪和识别用户。Cookies是当您浏览网站时&#xff0c;网站可以在您的计算机或移动设备上存储的小型文本文件。它们通常以键值对&#xff08;key/value&#xff09;的形式存储信息&#xff0c;并且每次您访问特定网…

.Net RabbitMQ(消息队列)

文章目录 一.RabbitMQ 介绍以及工作模式1.RabbitMQ的介绍&#xff1a;2.RabbitMQ的工作模式&#xff1a; 二.RabbitMQ安装1.安装Erlang语言环境2.安装RabbitMQ 三.在.Net中使用RabbitMQ1.HelloWorld模式2.工作队列模式3.发布订阅模式4.Routing路由模式和Topics通配符模式 一.Ra…

安全开发实战(4)--whois与子域名爆破

目录 安全开发专栏 前言 whois查询 子域名 子域名爆破 1.4 whois查询 方式1: 方式2: 1.5 子域名查询 方式1:子域名爆破 1.5.1 One 1.5.2 Two 方式2:其他方式 总结 安全开发专栏 安全开发实战​​http://t.csdnimg.cn/25N7H 前言 whois查询 Whois 查询是一种用…

java.lang.OutOfMemoryError: WrappedJavaFileObject --idea启动项目内存溢出解决

java.lang.OutOfMemoryError 解决方案 现象 项目开发时&#xff0c;启动idea&#xff0c;报内存溢出错误&#xff0c;如下&#xff1a; java: java.lang.OutOfMemoryError: WrappedJavaFileObject.....解决 通过 调整idea 的 配置参数 来调整 jvm 大小解决。 -Xmx8192m-Xm…

C++进修——C++基础入门

初识C 书写HelloWorld #include <iostream> using namespace std;int main() {cout << "HelloWorldd" << endl;system("pause");return 0; }注释 作用&#xff1a;在代码中加一些说明和解释&#xff0c;方便自己或其他程序员阅读代码…

二分法问题

日升时奋斗&#xff0c;日落时自省 目录 1、二分法 2、二分法问题 2.1 、在排序数组中查找元素的第一个和最后一个位置 2.2、搜索插入位置 2.3、山脉数组的峰顶索引 2.4、0-n-1中缺失的数字 1、二分法 二分法是比较简单的一种查找算法&#xff0c;但是效率很高&#xff0…