Vue3应用API——use解析


一、app.use

1.使用场景

  不论是Vue2中的Vue.use亦或者Vue3中的app.use。其功能主要是用在插件的安装上,往往是在项目的入口文件(比如main.js)中。被use的插件多数是 NPM 中的第三方库 。在必要的时候,也可以封装一个自定义的插件以供团队的使用。这样可以避免反复开发同一个功能。

2.原理

  从Vue源码对 app.use 描述可以看出,app.use(plugin) 中的核心部分“plugin(app, …options)”“plugin.install(app, …options)” 这两句;
  也就是说,app.use(plugin),本质上就是把plugin中的 install 方法调用一遍
  不仅如此,还可以发现 Vue 框架在 install 函数中暴露了 app实例, 所以在实际开发中能挂载到 app实例上的都可以在install函数中实现,然后通过app.use()将插件快速地应用到各个项目中;
  由此看来,我们也可以通过封装自定义插件供开发使用。

二、封装自定义插件

  一个插件可以是一个拥有 install() 方法的对象,也可以直接是一个安装函数本身

1.写法一

拥有 install() 方法的对象

// 写法一:对象中定义 install 函数
let myPlugin = {
    install(app) {
        // 定义一个实例方法
        app.config.globalProperties.sayHello = function () {
            alert('Hello, Nancy!');
        }
        // 定义一个全局指令:元素挂载后"自动聚焦"及"动态绑定数据"
        app.directive('myModel', {
            mounted(el, binding) {
                el.focus();
                el.value = binding.value;
            },
        })
        // 定义一个全局按钮组件
        app.component('el-button', {
            name: "el-button",
            template: '<button value="按钮">ElementUI按钮</button>'
        })
    }
}
export default myPlugin;

2.写法二

直接是一个安装函数本身

// 写法二:直接定义 install 函数
let install = function (app, options) {
    // 定义一个实例方法
    app.config.globalProperties.sayHello = function () {
        alert('Hello, Nancy!');
    }
    // 定义一个全局指令:元素挂载后"自动聚焦"及"动态绑定数据"
    app.directive('myModel', {
        mounted(el, binding, vnode, prevNode) {
            el.focus();
            el.value = binding.value;
        },
    })
    // 定义一个全局按钮组件
    app.component('el-button', {
        name: "el-button",
        template: '<button value="按钮">ElementUI按钮</button>'
    })
}
export default install;

3.应用插件

应用自定义插件(main.js)

import myPlugin from './plugin/myPlugin';
// 自动调用插件 myPlugin 的 install 方法
app.use(myPlugin);

组件中测试

<template>
  <!-- 测试插件中定义的全局按钮组件和实例方法 -->
  <el-button @click="sayHello()"></el-button>
  <!-- 测试自定义指令 -->
  <input type="text" v-myModel="msg">
</template>

<script setup>
import { ref } from 'vue';
let msg = ref('测试v-myModel指令');
</script>

效果

4.注意事项

  注意:不要滥用插件,多个项目都需要使用时才抽离成一个Vue插件,然后封装成一个Npm包。


总结

  app.use 在 Vue 中的作用主要是帮助团队将一些在各个部门中都需要使用的公共的与业务无关的部分从现有业务中抽离出来,形成一个独立的和业务无关的第三方库,以便在下次项目中直接通过use使用。NPM上就有大量的第三方库或者组件等,例如moment、element-ui等都属于与业务无关但是又经常使用的公共部分,便可以采用这种方法引入。

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
好的,下面我来为您介绍一下如何使用vue-router实现用户登录注册功能。 首先,我们需要安装vue-router,可以通过以下命令进行安装: ``` npm install vue-router --save ``` 然后,在main.js中引入并使用vue-router: ``` import VueRouter from 'vue-router' Vue.use(VueRouter) ``` 接下来,我们新建一个router.js文件,用于配置路由。在该文件中,我们需要定义路由路径和路由组件: ``` import Vue from 'vue' import VueRouter from 'vue-router' import Login from './components/Login.vue' import Register from './components/Register.vue' Vue.use(VueRouter) const routes = [ { path: '/login', component: Login }, { path: '/register', component: Register } ] const router = new VueRouter({ routes }) export default router ``` 在上面的代码中,我们定义了两个路由路径:/login和/register,并分别对应了Login和Register两个组件。 接下来,在App.vue中,我们需要使用<router-view>标签来显示路由组件: ``` <template> <div id="app"> <router-view></router-view> </div> </template> ``` 最后,在main.js中引入router.js,并将其挂载到Vue实例中: ``` import Vue from 'vue' import App from './App.vue' import router from './router' Vue.config.productionTip = false new Vue({ router, render: h => h(App), }).$mount('#app') ``` 至此,我们已经完成了基本的路由配置。接下来,我们可以在Login和Register组件中实现具体的登录和注册功能。 在Login组件中,我们可以使用Vue.js提供的v-model指令来绑定表单输入的数据,并在点击登录按钮时向服务器发送请求验证用户名和密码: ``` <template> <div class="login"> <h1>登录</h1> <form> <label>用户名:</label> <input type="text" v-model="username"> <br> <label>密码:</label> <input type="password" v-model="password"> <br> <button @click.prevent="login">登录</button> </form> </div> </template> <script> export default { data() { return { username: '', password: '' } }, methods: { login() { // 向服务器发送请求验证用户名和密码 } } } </script> ``` 而在Register组件中,我们可以使用v-model指令来绑定表单输入的数据,并在点击注册按钮时向服务器发送请求创建新用户: ``` <template> <div class="register"> <h1>注册</h1> <form> <label>用户名:</label> <input type="text" v-model="username"> <br> <label>密码:</label> <input type="password" v-model="password"> <br> <label>确认密码:</label> <input type="password" v-model="confirmPassword"> <br> <button @click.prevent="register">注册</button> </form> </div> </template> <script> export default { data() { return { username: '', password: '', confirmPassword: '' } }, methods: { register() { // 向服务器发送请求创建新用户 } } } </script> ``` 到这里,我们已经完成了一个简单的用户登录注册功能,并使用vue-router实现了路由跳转。当用户访问/login时,会显示Login组件;当用户访问/register时,会显示Register组件。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JV_32

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值