Vue.js学习笔记 05、Vue插件使用

简介: Vue.js学习笔记 05、Vue插件使用

一、Vue中的插件


1.1、插件的定义与参数认识


插件用途:将通用性的功能封装起来。


定义与使用如下:


<body>
    <div id="app"></div>
    <script src="https://unpkg.com/vue@3.1.5/dist/vue.global.js"></script>
    <script>
        // 1、定义插件,在对象中添加install()函数,并接收两个参数,第一个就是app实例,第二个就是传入进行的参数
        const myplugin = {
            install(app, options) {
                // 参数1:app实例对象
                console.log("app=>", app);
                // 参数2:外部传入的一些自定义参数
                console.log("options=>", options);
            }
        }
        const app = Vue.createApp({
        });
        console.log("外层app实例=>", app)
        // 2、使用插件
        app.use(myplugin);
        const vm = app.mount("#app");
    </script>
</body>


好处:通过使用插件,我们就能够让部分组件达到独立分离的效果了,那么如何将插件定义的功能应用到原本的Vue实例中呢?关键点就是在install()函数的第一个参数上,之后插件定义的内容都会挂载至整个app实例中(即vue创建的实例上),那么就能够达到使用对应组件的功能了,如应用element-ui!!!对于第二个参数应该就是对一些插件的配置项进行赋值使用了!



1.2、编写一些插件的功能


通过插件我们可以在app实例上添加如下内容:


provide声明属性值。(需配合inject数组来接收)

挂载自定义指令。

挂载mixin对象。

添加app实例的属性。

示例:下面在myplugin插件中包含上面提高的4个内容以及在app实例中实际应用见=>位置


<body>
    <div id="app"></div>
    <script src="https://unpkg.com/vue@3.1.5/dist/vue.global.js"></script>
    <script>
        const myplugin = {
            install(app, options) {
                //注意点:对应的属性、指令都挂载到了app实例上
                //1、挂载一些data属性
                app.provide("name", "changlu");
                //2、自定义指令
                app.directive('focus', {
                    mounted(el) {  //el为指定的dom元素
                        el.focus();
                    }
                });
                //3、混入数据mixin(包含data属性、methods方法以及生命周期函数等等)
                app.mixin({
                    data() {
                        return {
                            num: 10
                        }
                    },
                    methods: {
                        handleClick() {
                            alert(this.num);
                        }
                    },
                    mounted() {
                        console.log("mounted!");
                    }
                });
                //4、自定义实例属性
                app.config.globalProperties.$saynihao = () => console.log("nihao");;
            }
        };
        const app = Vue.createApp({
            mounted() {
                this.$saynihao();  //使用自定义的属性函数 => 4
            },
            inject: ['name'], //拿到指定provide声明的值=>1
            // v-focus:应用插件中的自定义指令 => 2
            // {{name}}:应用插件中的provide声明属性 => 3
            // @click="handleClick":应用插件中混入的mixin => 3
            template: `
                <input v-focus />
                <div>{{name}}</div>
                <button @click="handleClick">点我一下</button>
            `
        });
        app.use(myplugin);
        const vm = app.mount("#app");
    </script>
</body>





二、数据校验插件开发示例


需求:对于表单中的内容实时进行检测,若是不符合要求就打印出提示信息!


分析:我们可以在data实例中添加校验规则,之后使用插件来动态遍历校验规则并添加检测事件。


示例:


<body>
    <div id="app"></div>
    <script src="https://unpkg.com/vue@3.1.5/dist/vue.global.js"></script>
    <script>
        // 1、创建插件
        const validatorPlugin = (app, options) => {
            app.mixin({
                // 生命周期:在实例生成之后,对每一个规则属性都设置watch检测方法
                created() {
                    // console.log(this.$options.rules);//app的rules属性
                    //对rules数组进行遍历,并依次添加检测方法
                    for (const key in this.$options.rules) {
                        const item = this.$options.rules[key];
                        // 拿到对应属性的值:包含校验方法以及校验失败后的描述信息
                        this.$watch(key, (value) => {  //key是改变以前的值,value为改变后的值
                            if (item.validate(value)) {  //若是校验不通过返回true
                                console.log(item.message);  //输出描述信息
                            }
                        })
                    }
                },
            })
        }
        const app = Vue.createApp({
            // 校验规则按照这种形式来写即可,之后对于检测方法的添加都交由插件来进行处理
            rules: {
                username: {
                    validate: username => username.length < 5,
                    message: '用户名称长度小于5'
                },
                password: {
                    validate: password => password.includes('.'),
                    message: '密码有,请不要加入.'
                }
            },
            data() {
                return {
                    username: 'changlu',
                    password: '1234'
                }
            },
            // 动态绑定username与password属性值,一旦输入就会更新data对象中的指定属性值
            template: `
                用户名:<input type="type" v-model="username"/>
                密码:<input  type="password"  v-model="password"/>
            `
        });
        // 2、使用插件
        app.use(validatorPlugin);
        const vm = app.mount("#app");
    </script>
</body>



说明:对于输入的内容来进行实时监测,之后我们可以将其应用到提交表单时的校验等等操作!!!


相关文章
|
20天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
34 1
vue学习第四章
|
20天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
28 1
vue学习第九章(v-model)
|
19天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
33 1
vue学习第十章(组件开发)
|
25天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
26天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
26天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
26天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
25天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
38 3
|
27天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
25天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
50 2