首页 > 其他分享 >Vue3——自定义组件-插件

Vue3——自定义组件-插件

时间:2022-10-29 21:16:00浏览次数:139  
标签:el 插件 console 自定义 app binding vnode Vue3

Vue3 自定义指令 插件

官网链接:https://cn.vuejs.org/guide/reusability/custom-directives.html#introduce

1.自定义指令:
1.1自定义指令声明

局部声明

const focus = {
  mounted: (el) => el.focus()
}
export default {
  directives: {
    // 在模板中启用 v-focus
    focus
  }
}

使用:

<template>
    <div>      
        <input type="text" v-focus>
    </div>
</template>

全局声明

const app = createApp({})

// 使 v-focus 在所有组件中都可用
app.directive('demodir1', (el, binding) => {
    console.log(binding.value.color); //获取指令中对象的字段的值
    console.log(binding.value.text);
});

使用:

<template>
    <div>
        <div v-demodir1="{color:'white',text:'hello!'}"></div>
    </div>
</template>
1.2自定义指令钩子

钩子函数

const myDirective = {
  // 在绑定元素的 attribute 前
  // 或事件监听器应用前调用
  created(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
  },
  // 在元素被插入到 DOM 前调用
  beforeMount(el, binding, vnode, prevVnode) {},
  // 在绑定元素的父组件
  // 及他自己的所有子节点都挂载完成后调用
  mounted(el, binding, vnode, prevVnode) {},
  // 绑定元素的父组件更新前调用
  beforeUpdate(el, binding, vnode, prevVnode) {},
  // 在绑定元素的父组件
  // 及他自己的所有子节点都更新后调用
  updated(el, binding, vnode, prevVnode) {},
  // 绑定元素的父组件卸载前调用
  beforeUnmount(el, binding, vnode, prevVnode) {},
  // 绑定元素的父组件卸载后调用
  unmounted(el, binding, vnode, prevVnode) {}
}

钩子参数

指令的钩子会传递以下几种参数:

  • el:指令绑定到的元素。这可以用于直接操作 DOM。
  • binding:一个对象,包含以下属性。
    • value:传递给指令的值。例如在 v-my-directive="1 + 1" 中,值是 2
    • oldValue:之前的值,仅在 beforeUpdateupdated 中可用。无论值是否更改,它都可用。
    • arg:传递给指令的参数 (如果有的话)。例如在 v-my-directive:foo 中,参数是 "foo"
    • modifiers:一个包含修饰符的对象 (如果有的话)。例如在 v-my-directive.foo.bar 中,修饰符对象是 { foo: true, bar: true }
    • instance:使用该指令的组件实例。
    • dir:指令的定义对象。
  • vnode:代表绑定元素的底层 VNode。
  • prevNode:之前的渲染中代表指令所绑定元素的 VNode。仅在 beforeUpdateupdated 钩子中可用。

例子

声明

const demodir={
     mounted(el, binding, vnode, prevVnode) {
        console.log(el);
        console.log(binding.arg);
        console.log(binding.modifiers);
        console.log(binding.value);
        console.log(binding.oldValue);
        console.log(vnode);
        console.log(prevVnode);
     },
}
export default {
    directives:{
        demodir
    }
}

调用

 <template>
    <div>
      <h3 v-demodir:a.mdf="caicai">demodir</h3>
    </div>
</template>
2.插件

官网地址:https://cn.vuejs.org/guide/reusability/plugins.html#introduction

2.1插件的安装、注册、使用

插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码

安装插件:

export default {
    install: (app, options) => {
        //写插件代码 // 配置此应用
        app.config.globalProperties.$translate = (key) => {       
        };
     }
}

插件注册:(app是vue的实例)

import pluginName from './plugins/pluginName';
const app=creatApp(App);
app.use(pluginName,{
    // 配置此应用
})

插件调用:

<h1>{{ $translate('greetings.hello') }}</h1>

例子

//文件名 ii8n
export default {
    install: (app, options) => {
        //写插件代码
        app.config.globalProperties.$translate = (key) => {
            return key.split('.').reduce((o, i) => {
                if (o) return o[i]
            }, options)
        };
       // app.provide('i18n', options)
    }
}
//插件注册
app.use(i18n, {
    greetings: {
        hello: '你好啊!!'
    },
    word1: "小爱同学"
})
<!--调用-->
<h3>{{$translate('word1')}}</h3>
2.2 插件中的 Provide / Inject

依赖注入,逐级透传

我们可以将插件接收到的 options 参数提供给整个应用,让任何组件都能使用这个对象。

export default {
    install: (app, options) => {
        //写插件代码
        app.config.globalProperties.$translate = (key) => {
            return key.split('.').reduce((o, i) => {
                if (o) return o[i]
            }, options)
        };
        app.provide('i18n', options)
    }
}
export default {
  inject: ['i18n'],
  created() {
    console.log(this.i18n.greetings.hello)
  }
}

标签:el,插件,console,自定义,app,binding,vnode,Vue3
From: https://www.cnblogs.com/caiiac/p/16839847.html

相关文章

  • 【JEECG】Vue3-03Pinia详细使用教程
    1、安装npminstallpinia或yarnaddpinia2、引用import{createApp}from'vue'importAppfrom'./App.vue'import{createPinia}from'pinia'constpinia=create......
  • 【JEECG】Vue3-02Vite详细使用教程
    1、概要介绍1.1什么是Vite​​https://cn.vitejs.dev/​​新型前端构建工具,主要由两部分组成:一个开发服务器,基于原生ES模块提供内建功能,如模块热更新(HMR)。一套构建......
  • antd的update组件自定义上传样式及列表样式
    项目需求按UI设计上传的样式需要把showUploadList={false},自己写上传列表//本次上传的文件const[fileList,setFileList]=useState([]);//初始化时存储之前上传......
  • Vue的自定义组件
    Vue的自定义组件自定义组件的作用是为了提高复用性,减少重复的代码,提高可维护性全局组件语法:vue.component("自定义组件名称",{自定义组件结构})vue.component("自......
  • Qt应用程序接口和插件的创建详细过程
    Qt应用程序接口:包含类定义的头文件(*.h),该类定义中一般只包含纯虚函数的声明。Qt应用程序插件:继承自指定类和接口的C++类,该类实现了接口中定义的纯虚函数。 ------------......
  • VScode必备插件
    VScode必备插件1、外观相关MaterialIconTheme-文件图标GithubDarkClassictheme-Github经典暗黑主题ChineseLanguagePack-中文翻译包2、前端相关Auto......
  • 自定义jar包的使用
    1.先生成或者下载jar包到本地lib文件夹2.通过命令把jar包加到本地maven仓库命令把jar包加到本地maven仓库mvninstall:install-file-Dfile=ctg-ag-sdk-core-2.5.0-20220......
  • DOM第四章tab切换和自定义属性节点操作
    tab切换和自定义属性京东tab栏切换<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • STARLIMS VSCode插件
    地址:https://github.com/mariuspopovici/starlimsvscode功能:EnterpriseDesigner(应用程序、数据源、服务器脚本和客户端脚本)的Explorer将STARLIMS代码的副本下载到......
  • Terraform 语法 provider插件
     语法是terraform最重要的一点,有两个部分来讲解,第一部分是基础,第二部分是更加高级的扩展。后面各种实践其实就是对terraform语法编写。第一部分是provider插件,provider提供......