前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mixin 传递参数

mixin 传递参数

作者头像
吟风者
发布于 2021-11-24 07:09:44
发布于 2021-11-24 07:09:44
3.5K00
代码可运行
举报
文章被收录于专栏:吟风者吟风者
运行总次数:0
代码可运行

在 Vue2 中,可以通过mixin把一些重复的代码提取出来。

方法一

mixA.vue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// mixA.vue
export default {
  created() {
    console.log('mixin A created...');
}

我想在 Demo.vue 中的created也输出mixin A created...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Demo.vue
import MixA from './mixA.vue';
export default {
  mixins: [MixA]
}

但是如果我想给mixA传入一个 url 和一些参数,然后发送ajax请求? 可以吧mixA写成一个js文件,而不是vue

mixA.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// mixA.js
/**
 * mixin
 * @param {object} configs 传递过来的,请求时候的参数配置,{ url、params }
 * @returns {function} mixin
 */
export default (configs) => {
  return {
      data:() => ({
        a: 123,
        b: 234,
        dataList: [],  // 装请求来的数据
        ...configs  // 把传递过来的参数混入,这样 this 就有 url 和 请求需要的参数了
      }),
      methods: {
          async getData() {
              const params = {
                    c: 1,
                    d: 2,
                    ...configs.params
              }
              this.dataList = await this.axios.get(this.url, { params });
          }
      },
      created() {
        this.getData();
      }
  }
}

使用的组件:Demo.vue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Demo.vue
<template>
    <div class="demo-wrap">
        <li v-for="item in dataList" :key="item">{{ item }}</li>  <!-- 这里的 dataList 是 mixA.js 的数据 -->
    </div>
</template>
<script>
    import MixA from './mixA.js';
    // 传递给 mixin 的参数配置
    const configs = {
        url: '/v5/product/game/recommend',
        params: {
            gameId: '',
            cmd: 1,
        },
    };

    const mixa = new MixA(configs);
    export default {
        mixins: [mixa]
    }
</script>

如果像我这种情况,gameIdrouter过来传过来的,可以在beforeRouteEnter钩子函数中修改,因为mixin的组件,是在使用的组件之前先创建的,也就是说,mixAcreated要比Demo.vuecreated更先执行,所以可以这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Demo.vue
import MixA from './mixA.js';
// 传递给 mixin 的参数配置
const configs = {
    url: '/v5/product/game/recommend',
    params: {
        gameId: '',
        cmd: 1,
    },
};
export default {
    name: 'demo',

    // 进来之前,修改传给 mixin 的参数配置
    beforeRouteEnter(from, to, next) {
        configs.params.gameId = from.query.gameId;
        next(true);
    },

    mixins: [mixa],
};

方法二

通过window对象进行传递 在mixin中对组件的初始化参数进行监听,如果已经初始化,需要传递参数了,那么就对参数进行修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//mixin js
let viewer = null;
const tools = {
    watch: {
        initialized: function (val) {
            if (val) {
                viewer = window.viewer;
            }
        }
    }
}
export default tools;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//index.vue
<script>
import {mixin} from "@/mixin";
    
let viewer = null;

export default {
  mixins: [mixin],
  name: "Index",
  data() {
    return {
      initialized: false,
    };
  },
  mounted() {
    this.init().then((viewer) => {
      this.initialized = true;
      window.viewer = viewer;
    });
  },
  methods: {
    init: function () {
     viewer = new XXX();//随便写的类
        resolve(viewer);
      })
    }
  },
};
</script>

方法三

新建mixins文件

src目录下新建mixins目录。mixins目录里新建index.js文件。在这里写一个loadPage路由跳转方法供全局使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default = {
  data(){
    return{};
  },
  methods:{
    loadPage(routerName,param){
      if(param){
        this.$router.push({name:routerName,query:param});
      }else{
        this.$router.push({name:routerName});
      }
    }
  }
}

把mixins注册全局

src/main.js文件加入以下两行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Mixin from './mixins';
Vue.mixin(Mixin);

加入后,main.js文件如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Vue from 'vue'
import App from '@/App'
import router from './router'
import Mixin from './mixins';
Vue.mixin(Mixin);

Vue.config.productionTip = false

new Vue({
  el: '#app',
  router,
  render: h => h(App)
})

使用mixins里的方法

设置路由

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// src/router/index.js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)

export default new Router({
  mode:'history',
  routes: [
    {
      path:'/',
      redirect:'/index'
    },
    {
      path: '/about',
      name: 'About',
      component:resolve => require(['@/pages/About'],resolve)
    },
    {
      path: '/index',
      name: 'Index',
      component:resolve => require(['@/pages/Index'],resolve)
    },
    {
      path: '/product',
      name: 'Product',
      component:resolve => require(['@/pages/Product'],resolve)
    }
  ]
})

页面调用mixins里的loadPage方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p @click="loadPage('Index')">Index</p>

需要用到路由跳转的页面如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div>
    <p>这是index页面</p>
    <p @click="loadPage('Index')">Index</p>
    <p @click="loadPage('About')">About</p>
    <p @click="loadPage('Product')">Product</p>
  </div>
</template>

参考:《vue》mixin 传递参数 vue 项目中 全局使用 mixins(全局混入)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/2 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
自己开发的App如何上架,详细解读App上架操作流程
对于企业或个人开发的App,上架是必经之路。然而,许多人不清楚如何进行App上架。工信部在2023年规定,App必须备案才能上架。那么,让我们一起了解App上架流程吧。
爱学iOS的小麦子
2024/04/15
3.4K0
Android Notes | 应用认领/转移那点事儿
腾讯那么大的体量,最基本的一个客服,找不到。即使运气好,找到了,也只会很机械性回复几句根本没用的话,无语了。
贺biubiu
2020/07/06
1.2K1
uniapp开发App从开发到上架全过程
​当我们的APP开发完毕,最终交付的时候,必然要经历的一个环节,就是APP上架,国内APP上架一般为IOS端appstore上架,安卓端应用商店比较多,最常见的应用商店有华为应用商店、小米应用商店、OPPO应用商店、VIVO应用商店、应用宝应用商店等。
iOS Magician
2023/11/30
6220
uniapp开发App从开发到上架全过程
APP上架到各大应用商店的小总结
转自https://blog.csdn.net/niezhipeng8/article/details/79103436
用户1191760
2019/05/22
3.3K0
《提升鸿蒙Next应用审核与上架效率之道》
开发者应仔细研读华为应用市场的审核指南,明确应用在功能、内容、隐私政策、权限使用等方面的具体要求。在开发过程中,可参考过往审核通过的相似应用案例,了解审核重点和常见问题,确保应用从设计阶段就符合审核要求。同时,要熟悉上架流程,包括注册开发者账号、创建应用信息、提交审核等各个环节,避免因操作不熟悉而导致延误。
程序员阿伟
2025/01/20
1530
《提升鸿蒙Next应用审核与上架效率之道》
如何在应用宝上架时进行免费APP加固?
友情提醒,加固完成后需下载加固包进行重签名(步骤8开始),重新在应用市场上传apk哦~
腾讯云@移动安全
2018/05/10
24.5K3
如何在应用宝上架时进行免费APP加固?
小米应用商店上架流程
小米应用商店是国内主流的应用商店之一,可以将开发好的app提交到小米开放平台,通过审核之后,就可以在小米应用商店搜索下载了。下面介绍一下小米应用商店的上架流程和注意事项,供大家参考。
特特法爷
2022/09/23
2.9K0
Android App上架应用市场所需资料说明
  作为Android开发工程师,如果你的人生中没有自己上架过应用,那是很幸运的,因为那样你就不用去准备一堆材料了,不说废话了,进入主题。
晨曦_LLW
2021/07/20
1.9K0
Android App上架应用市场所需资料说明
app上架需要准备什么以及上架流程
而安卓市场又分为:第三方市场(如:应用宝、360手机助手、豌豆荚),和手机厂商市场(如:华为、OPPO、VIVO、小米等)。​
iOS程序应用
2023/04/17
2K0
app上架需要准备什么以及上架流程
uni-app的app打包过程
https://nativesupport.dcloud.net.cn/AppDocs/README
达达前端
2020/11/16
4.7K0
uni-app的app打包过程
iOS应用提交上架的最新流程
本篇博客介绍了iOS应用程序上架的最新流程。包括上架基本需求资料、证书的创建和使用、测试设备的添加、描述文件的创建、打包、审核等步骤。
爱学iOS的小麦子
2024/02/04
3240
iOS上架App Store详解(图文)
通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestFlight测试然后提交审核的完整流程!
iOS程序应用
2023/03/17
1.6K0
如果苹果上架审核7个工作日仍无反应如何向苹果官方询问进度和提交反馈-App Store Connect方式和发送邮件询问方式-优雅草卓伊凡
有个客户委托我的app的上架由于已经超过7天没有反应,7个自然日,因此比较焦急想要追寻问一下结果。
卓伊凡
2025/03/30
2190
app上架苹果市场流程
注意: 1> 电子邮件地址: 填写你申请开发者账号的电子邮件地址 2> 常用名称: 默认就好 3> CA电子邮件地址: 空 4> 请求存储到磁盘(到时可以选择保存到桌面,方便找到使用)
iOS Magician
2023/03/22
6670
app上架苹果市场流程
APP上架需要的准备和流程
(1) 个人账号(Individual):费用99美金一年, 该账号在App Store销售者只能显示个人的ID,比如zhitian zhang,单人使用。个人账号只能有一个开发者。100个苹果的iOS设备UDID测试。​
iOS程序应用
2022/12/06
1.7K0
快速上线个小程序?来微搭应用市场
位于大西北的甘肃省张掖市高台县,2010年前后还是一个国家贫困县,整个县城只有10所幼儿园,学前教育资源也相对贫瘠。
TCS-F
2021/09/06
1.5K0
快速上线个小程序?来微搭应用市场
iOS 应用上架流程详解
欢迎来到我的博客,今天我将为大家分享 iOS 应用上架的详细流程。在这个数字化时代,移动应用已经成为了人们生活中不可或缺的一部分,而 iOS 平台的 App Store 则是开发者们发布应用的主要渠道之一。因此,了解如何将您的 iOS 应用成功上架至 App Store 是至关重要的。
爱学iOS的小麦子
2023/07/30
3910
APP因合规问题无法上架
不要将自定义基座提交平台审核。调试模式下不会处理合规问题。需要注意!APP没有配置隐私与政策提示框。请认真阅读Android平台隐私与政策提示框配置方法配置你APP的隐私弹窗。配置隐私弹窗时一定要配置使用template模式。否则无法上架应用市场。应用内部自己实现的隐私弹窗也不行。一定要使用uni提供的隐私弹窗并使用template模式切记!
西里国际站
2023/04/18
3.4K0
APP因合规问题无法上架
2022最新苹果APP上架App Store流程(超详细)
APP IDs在后面创建发布文件,创建APP时都要用到。(appid非常重要,整个上架流程就是用appid关联在一起)
iOS程序应用
2022/11/01
5.9K1
第三方登陆——QQ登陆详解
点击查看,有APP ID和APP Key就可以先测试使用,这样审核也不会浪费我们时间
思索
2024/08/16
9970
第三方登陆——QQ登陆详解
相关推荐
自己开发的App如何上架,详细解读App上架操作流程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档