广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue中使用mixins/extends传入参数的方式
  • 824
分享到

vue中使用mixins/extends传入参数的方式

2024-04-02 19:04:59 824人浏览 泡泡鱼
摘要

目录使用mixins/extends传入参数Vue mixins的原理使用mixins/extends传入参数 最近做报表页面,基本都是列表页面,所以想用mixins。 但是接口的u

使用mixins/extends传入参数

最近做报表页面,基本都是列表页面,所以想用mixins。

但是接口的url不同,于是考虑怎么才能传入参数去适配各个页面。

后来发现mixin文件可以写个函数,接受传递过来的参数,然后return一个对象。

大概如下:

mixin.js

export default function(config) {
    let {
        listUrl="",
        exportUrl=""
    } = config;
    return {
        created() {
            console.log(listUrl);
            console.log(exportUrl);
        }
    }
}

xxx.vue

import Mixin from './mixin';
let mixin = new Mixin({
    listUrl: "www.baidu.com",
    exportUrl: "www.yahu.com"
})
 
export default{
    mixins:[mixin],
}

extends也是差不多。 

vue mixins的原理

以前一直以为mixins在vue里面应该不是很重要,只是提供了一个混入的api,慢慢的才知道mixin在vue里面非常重要。生命周期、vuex等都有mixin的影子,在内部算是很重要的一个api。

先上精简过后的源码

export const LIFECYCLE_HOOKS = [
    'beforeCreate',
    'created',
    'beforeMount',
    'mounted',
    'beforeUpdate',
    'updated',
    'beforeDestroy',
    'destroyed',
]
const strats = {};
function mergeHook(parentVal, childValue) {
    if (childValue) {
        if (parentVal) {
            return parentVal.concat(childValue);
        } else {
            return [childValue]
        }
    } else {
        return parentVal;
    }
}
LIFECYCLE_HOOKS.forEach(hook => {
    strats[hook] = mergeHook
})

上面这部分很好理解,是生命周期的合并,下面判断有这些生命周期的key的时候,直接调用strats[key](parent[key], child[key]),我们都知道生命周期的mixins是先执行mixins的再执行当前组件的,所以直接concat,后面执行循环调用的时候就是这个顺序。

export function mergeOptions(parent, child) {
    const options = {}
    if (child.mixins) {
        for (var i = 0, l = child.mixins.length; i < l; i++) {
            var mixin = child.mixins[i];
            parent = mergeOptions(parent, mixin);
        }
    }
    for (let key in parent) {
        mergeField(key)
    }
    for (let key in child) {
        if (!parent.hasOwnProperty(key)) {
            mergeField(key);
        }
    }
    function mergeField(key) {
        if (strats[key]) {
            options[key] = strats[key](parent[key], child[key]);
        } else {
            if (typeof parent[key] == 'object' && typeof child[key] == 'object') {
                options[key] = {
                    ...parent[key],
                    ...child[key]
                }
            }else{
                options[key] = child[key];
            }
        }
    }
    return options
}

这边生命周期是单独判断,其他熟悉方法则是一起的,比如方法methods,如果父和子都有,就结构合并在一起。因为mixins用法可以传入一个数组,这边还需要优先判断是否有mixins字段,有就要递归合并。

核心有了其他都是调用了,比如把mixin方法挂载到vue上可以直接调用:

Vue.mixin = function (mixin) {
    // 将属性合并到Vue.options上
    this.options = mergeOptions(this.options,mixin);
    return this;
}

初始化的时候先合并一次,生命周期也是,在状态初始化之前先调用beforeCreate,初始化之后调用created,源码搜索Vue.prototype._init这个方法里面就能看见,包括其他生命周期,可以搜索callhook去看看:

vm.$options = mergeOptions(vm.constructor.options,options);
callHook(vm,'beforeCreate');

// 初始化状态

initState(vm);
callHook(vm,'created');

callHook就是循环调用生命周期:

export function callHook(vm, hook) {
    const handlers = vm.$options[hook];
    if (handlers) {
        for (let i = 0; i < handlers.length; i++) {
            handlers[i].call(vm);
        }
    }
}

mixin方法核心就是合并实例的属性,watch、methods、data等,也可以新增一开始没有的属性,比如vuex的$store。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: vue中使用mixins/extends传入参数的方式

本文链接: https://www.lsjlt.com/news/149560.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue中使用mixins/extends传入参数的方式
    目录使用mixins/extends传入参数vue mixins的原理使用mixins/extends传入参数 最近做报表页面,基本都是列表页面,所以想用mixins。 但是接口的u...
    99+
    2022-11-13
  • Vue中mapMutations传递参数方式
    目录通过子组件定义的方法传递参数在…mapMutations引用当然也可以写直接传递关于mapMutations的作用通过子组件定义的方法传递参数 在…m...
    99+
    2022-11-13
  • vue中的mixins混入使用方法
    目录mixinsmixins理解使用方法全局混入局部混入mixins的使用方法的复用方法的覆盖合并生命周期mixins 混合 (mixins) 是一种分发 Vue 组件中可复用功能的...
    99+
    2022-11-13
  • vue中混入mixins的使用方法
    目录前言使用方法总结前言 Vue中有一个设置项叫做混入 (mixins), 它的使用是用来做代码复用的。同时, 这个mixins 也分为局部混入和全局混入 vue中的解释是这样的,如...
    99+
    2022-11-12
  • Vue中mapMutations传递参数方式是什么
    本篇内容主要讲解“Vue中mapMutations传递参数方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中mapMutations传递参数方式是什么”吧!通过子组件定义的方法传递...
    99+
    2023-06-30
  • vue-router参数传递的方式是什么
    本篇内容介绍了“vue-router参数传递的方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue-router传递参数分为两大类...
    99+
    2023-07-04
  • vue路由传参方式的方式总结及获取参数详解
    目录一、声明式传参1.params传参(显示参数)2.params传参(不显示参数)3.query 传参二、编程式传参1.params传参(显示参数)2.params传参(不显示参数...
    99+
    2022-11-13
  • 使用mybatis的interceptor修改执行sql以及传入参数方式
    目录mybatis interceptor修改执行sql以及传入参数总体思路1、Interceptor 代码实现2、AutoConfiguration代码实现mybatis inte...
    99+
    2022-11-12
  • vue中的mixins怎么混入使用
    这篇文章主要介绍了vue中的mixins怎么混入使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue中的mixins怎么混入使用文章都会有所收获,下面我们一起来看看吧。作用用简单的话去概括就是一种分发vue...
    99+
    2023-06-30
  • axios中怎么使用params传参传入数组
    本篇文章给大家分享的是有关axios中怎么使用params传参传入数组,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如下:changeList...
    99+
    2022-10-19
  • Vue中常见的几种传参方式小结
    目录前言父子组件之间传参兄弟组件之间传参provide/inject传参总结前言 Vue组件传参方也是面试最常考的内容,犹记得当初刚出来实习的时候,遇到一个需求,大概就是一个tabs...
    99+
    2023-05-19
    vue传参方式有哪些 vue传参方法 vue传参
  • 关于Vue的URL转跳与参数传递方式
    目录Vue URL转跳与参数传递1.通过router-link进行跳转2.$router方式跳转3.跳转外部链接Vue参数传递的几种方法1. 通过name传递参数2. 通过<r...
    99+
    2023-03-10
    Vue URL转跳 Vue参数传递 Vue参数
  • 关于Vue组件间的常用传参方式
    目录组件间常用传参方式1. props、emit(最常用的父子通讯方式)2. 事件总线EventBus(常用任意两个组件之间的通讯)3.Vuex状态管理vue组件传参记录几个不太常用...
    99+
    2022-11-13
  • C#中参数的传递方式详解
    值类型参数按值传递 class Program { static void Main(string[] args) { ...
    99+
    2022-11-13
    C# 传递参数
  • mybatis对传入基本类型参数的判断方式
    目录对传入基本类型参数的判断解决办法传入基本类型参数时test判断报错分析解决办法小结一下对传入基本类型参数的判断 mybatis的xml文件的sql语句中parameterType...
    99+
    2022-11-13
  • Go中数组传参的方式有哪些
    这篇文章主要介绍“Go中数组传参的方式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go中数组传参的方式有哪些”文章能帮助大家解决问题。初学Golang,数组传参问题就是把我整不会了,以前我们...
    99+
    2023-07-05
  • python中函数传递参数的方式有哪些
    本篇文章为大家展示了python中函数传递参数的方式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不...
    99+
    2023-06-14
  • Shell参数传递的使用方法
    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…...
    99+
    2023-05-19
    Shell 参数传递 Shell 传递参数
  • Shell 参数传递的使用方法
    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……具体实例:以下实例我们向脚本传递三个参数,并分别输出...
    99+
    2023-05-12
    Shell 参数传递 Shell 传递参数
  • 使用JPA传递参数的方法
    目录JPA传递参数的方法第一种第二种浅谈JPA优缺点一.JPA的理解二.JPA 实体生命周期理解和总结三.为什么要使用JPAJPA传递参数的方法 第一种         @Quer...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作