vue实现自定义公共组件及提取公共的方法

目录
  • 自定义公共组件及提取公共的方法
    • vue自定义公共组件
    • vue 提取公共的方法
  • vue定义公用方法

自定义公共组件及提取公共的方法

vue自定义公共组件

我们在编写页面的时候,会存在公共的组件,比如头部和底部菜单

我们拿公共头部为例子,想在每个页面都显示公共头部的实现方式有两种:

在src/components目录创建目录 common, 再创建header.vue

header.vue

<template>
  <div>
  <h1>header in here</h1>
  </div>
</template>
 <script>
  export default{}
 </script>

1.全局挂载组件

在main.js里挂载

import headerTop from "xxx/components/common/header" //引入组件
//第一个参数表示 head-view标签的内容都用第二个参数headerTop来代替
 Vue.component("head-view",headerTop);
 
//然后在需要使用的vue文件中引入头部的话,只需要加入 <head-view></head-view>标签//

组件局部引入,需要用的时候才引入使用

 //在需要使用的VUE文件中引入头部:
 <template>
 <headerTopNav></headerTopNav>
 </template>
 <script>
import headerTopNav from 'xxx/components/common/header' //引入组件
 export default{
 components: {headerTopNav} //表示headerTopNav标签的内容被headerTopNav组件代替
 }
 </script>

vue 提取公共的方法

创建文件夹 以及 JS文件 用来存放公共的方法

common.js 文件中内容如下

const commonData = () => {
	console.log('我是公共的方法')
}
export { commonData }

全局使用:

① 在 main.js 文件中全局引入,并在 vue 的原型链 (prototype) 中注册

// 引入 common.js
import { commonData } from './utils/common.js'
// 将 common 配置给 Vue 的 $common 成员
Vue.prototype.$commonData = commonData

然后在需要用到该方法的组件文件中使用,如下

<template>
  <div></div>
</template>
<script>
export default {
  created() {
    this.$commonData();
  }
};
</script>
<style lang="less" scoped>
</style>

② 在需要用到该方法的组件文件中局部引用

import { commonData } from '../utils/common.js'
<script>
export default {
	created() {
    	commonData();
  	}
};
</script>

vue定义公用方法

在src目录下新建common公用方法文件夹用于存放公用方法列表

common下新建common.js

该示例定义存、取、删cookie方法

main.js中引入该文件,并将其添加到Vue原型链上

import common from './common/common'
Vue.prototype.$common = common  //其中$common就是调用时所使用的方法

紧接着定义common.js中的方法,录入即用

   export default { //公开
    /**
     * 设置cookie
     **/
    setCookie(name, value, day) {
        let date = new Date();
        date.setDate(date.getDate() + day);
        document.cookie = name + '=' + value + ';expires=' + date;
    },
    /**
     * 获取cookie
     **/
    getCookie(name){
        let reg = RegExp(name + '=([^;]+)');
        let arr = document.cookie.match(reg);
        if (arr) {
            return arr[1];
        } else {
            return '';
        }
    },
    /**
     * 删除cookie
     **/
    delCookie(name) {
        setCookie(name, null, -1);
    }
}

使用:

在需求页面打印 this.$common

打印结果是这样的就说明方法添加成功了,如果想要添加其他的方法也可以通过这样的形式在原型链上新增方法

要使用则是:

this.$common.setCookie('cookieName',存入字符串,天数) //存cookie
this.$common.getCookie('cookieName') //取
this.$common.delCookie('cookieName') //删除

更新:

若是想将其直接定义为全局,且在this指向下,可以这样做:

首先依旧是定义你想要作为公用的方法

/**
 * 设置cookie
 **/
function setCookie(name, value, day) {
  let date = new Date();
  date.setDate(date.getDate() + day);
  document.cookie = name + '=' + value + ';expires=' + date;
};
/**
 * 获取cookie
 **/
function getCookie(name) {
  let reg = RegExp(name + '=([^;]+)');
  let arr = document.cookie.match(reg);
  if (arr) {
    return arr[1];
  } else {
    return '';
  }
};
/**
 * 删除cookie
 **/
function delCookie(name) {
  setCookie(name, null, -1);
};

然后:

将方法注册,并添加到Vue的原型链

export default {
  install(Vue,opeions){
    Vue.prototype.getCookie = getCookie;
    Vue.prototype.setCookie = setCookie;
    Vue.prototype.delCookie = delCookie;
  }
};

注:注册之后需要在main.js引入并use才能生效

import commonApi from './util/common' //你的公用方法文件路径
Vue.use(commonApi)

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

(0)

相关推荐

  • web面试vue自定义组件及调用方式

    引入: 由于项目需求, 部分相同的代码我们会封装成组件, 在需要使用的地方导入, 并以标签的形式书写在中, 但是在"vant"组件库中, "Dialog 弹出框"组件有2中使用方式 通常我们自定义组件, 一般也是通过方式二的形式使用, 今天介绍方式一如何使用 编码实现 以插件的形式使用组件 // 将要显示的组件导入 import mymodel from '../components/mymodel.vue' export default { install: fu

  • Vue自定义组件的四种方式示例详解

    四种组件定义方式都存在以下共性(血泪史) 规则: 1.组件只能有一个根标签 2.记住两个词全局和局部 3.组件名称命名中'-小写字母'相当于大写英文字母(hello-com 相当于 helloCom) 而对于在HTML中自定义组件的时候有4种写法,不过也只是殊途同归,都是用template属性对应的只有一个根标签的HTML代码. 1.全局组件 定义方式示例: Vue.component("hello-component",{ props:["message"], t

  • 如何抽象一个Vue公共组件

    之前一直想写一篇关于抽象 Vue 组件的随笔,无奈一直没想到好的例子.恰巧最近为公司项目做了一个数字键盘的组件,于是就以这个为例聊聊如何抽象 Vue 的组件. 先上 Demo 与 源码.(demo最好在浏览器里以手机模式浏览) 在讲具体实现前,我想先分享下自己认为的理想的公用组件是什么样的: 1. 黑盒性,即除了你自己以外,其他的开发者在快速阅读使用文档之后可以立刻上手,而不用关心你的内部实现: 2. 独立性,即做好解耦,不与父组件有过多关联: 3 自定义性,适当地暴露一些输入接口或者方法给外部

  • Vue组件公用方法提取mixin实现

    目录 一.应用场景 二.实现方法 1.提取js共用方法文件 2.引入 三.注意事项 一.应用场景 多个组件共用一个方法时可以用 mixin 抽取到一个js文件中,作为共用方法 二.实现方法 1.提取js共用方法文件 export const common = {          // 组件共用属性 ----------------------------------     data() {         return {             age: 18              

  • vue实现自定义公共组件及提取公共的方法

    目录 自定义公共组件及提取公共的方法 vue自定义公共组件 vue 提取公共的方法 vue定义公用方法 自定义公共组件及提取公共的方法 vue自定义公共组件 我们在编写页面的时候,会存在公共的组件,比如头部和底部菜单 我们拿公共头部为例子,想在每个页面都显示公共头部的实现方式有两种: 在src/components目录创建目录 common, 再创建header.vue header.vue <template>   <div>   <h1>header in here

  • vue实现自定义日期组件功能的实例代码

    实现一个日期组件,如图: components.js代码如下: Vue.component('sc-calendar',{ template:'<div class="scCalendar">' + '<div class="calendar_header">' + '<div class="prev" @click="prevMonth"> < </div>' + '&l

  • vue封装自定义分页器组件与使用方法分享

    前言 分页是开发各种系统时候最常用的功能,下面为本人封装的一个分页组件. 实现分页器操作需要以下参数 当前页: pageNo 每页展示条数: pageSize 数据总条数 : total 连续页码数:continues (一般为奇数,页面对称更美观) 分页器在各大项目中出现的频率较多,我们可以封装成静态组件,并全局注册这个组件. 1.全局注册组件方法:在mian.js文件中操作 import Pagination from '@/components/Pagination' // 组件路径 Vu

  • vue 使用自定义指令实现表单校验的方法

    笔者近期在公司的项目中使用自定义指令完成了表单校验. 这里将思路分享给大家,并写了一个小demo.这个自定义指令还需要大家自行完善. demo可见Github:vue-form-param-check 首先关于自定义指令的介绍可以参考官网. 首先,在github上已经有了一些开源组件可以支持表单校验.但是对于一些小项目而言,引入一个很大的东西实际上并不好.所以这里利用vue的自定义指令对表单校验进行了简单的实现. 分析 在平时我们所见的表单中,常见的做法有2种: - input框输入时和提交时,

  • Vue中自定义全局组件的实现方法

    前言 有时候我们在做开发的时候,就想自己写一个插件然后就可以使用自己的插件,那种成就感很强.今天就解决了一个长期困扰着我的问题,现在记录一下,供日后参考. 涉及知识点是Vue.js官网教程中的插件使用 方法如下: 首先我遇到的问题就是我自定义的组件如果需要在项目中其他组件中多次被调用,而我之前的解决方法就是简单的,哪里需要在哪引用.这无疑增加了许多代码重复. 而在使用Vue.js的一些UI框架的时候则注意到,只需要在项目的入口文件中import这个插件然后在接着Vue.use('插件名').这样

  • Vue可自定义tab组件用法实例

    在工作中我们常常要用到tab组件,如果有用第三方组件库的话一般都会有这个组件,但如果没有使用第三方组件库,或者想要自定义tab,那么或许这个无依赖的tab组件将会极大地节约你的开发时间. 如何使用? 1. 首先先安装: npm i vue-cus-tabs -S 2. 在new vue之前引入样式并use一下VueCusTab: import 'vue-cus-tabs/style/index.css' import { installCusTabs } from 'vue-cus-tabs';

  • vue+element自定义查询组件

    本文主要介绍vue项目,在引入element的前提下,对组件进行二次封装实现通过配置项直接布局. 一.查询条件组件化 结合EventBus.js的使用,传递事件更高效,可以避免各种复杂的生命周期依赖关系. 在components/dataForm文件夹下dataForm.vue作为组件集合的载体,并创建配置项 1.1 dataForm代码实例 // dataForm.vue <template> <el-row> <input-form v-for="(item,i

  • .html页面引入vue并使用公共组件方式

    目录 .html页面引入vue并使用公共组件 问题描述 解决办法 目录结构 vue公共组件框架搭建 步骤详述 总结 .html页面引入vue并使用公共组件 问题描述 整体项目采用传统 .html 文件搭建,vue仅作为渲染数据工具使用,需要使用的地方使用 <script> 标签引入. 现有数个页面,每个页面都包含相同 header 和 footer ,希望可以把 header 和 footer 提取出来,避免太多重复代码. 解决办法 公共部分写在 .js 文件里,本质就是在当前页面中写的公共组

  • vue自定义全局组件(自定义插件)的用法

    有时候我们在做开发的时候,就想自己写一个插件然后就可以使用自己的插件,那种成就感很强.博主最近研究element-ui和axios的时候,发现他们是自定义组件,但是唯一有一点不同的是,在用element-ui的时候是使用Vue.use()语句来使用的,而axios的时候,不用Vue.use(),只要import就可以导入进来了,感觉很神奇,细细的发现,原来他们的不同是因为axios里面并没有写install方法,而element-ui就有写这个方法,下面就利用这个install来写一个自己的插件

  • 解决vue同一slot在组件中渲染多次的问题

    Q:今天写公共组件的时候碰到一个奇葩的情况,slot内部需要再次调用slot,这就会导致同一slot在组件中渲染多次引发的bug A:把把父组件需要传入的dom结构作为props属性传递给slotRender,保证出来的dom结构不相同(尽管它们都是同一vnode渲染出来的) 定义一个渲染slot的组件 子公共组件调用 父公共组件调用 以上这篇解决vue同一slot在组件中渲染多次的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐