精华内容
下载资源
问答
  • vue封装echarts示例

    2021-10-30 18:46:19
    1、首先先弄明白vue怎么引入echarts示例,再弄封装echarts这个事情vue框架引入echarts示例 2、封装组件 pops是: 父组件通过v-bind向子组件传值,子组件通过props来获取父组件传递过来的值,被引用的就是子组件 3...

    1、首先先弄明白vue怎么引入echarts示例,再弄封装echarts这个事情vue框架引入echarts示例
    2、封装组件

    pops是: 父组件通过v-bind向子组件传值,子组件通过props来获取父组件传递过来的值,被引用的就是子组件

    在这里插入图片描述
    3、组件并通过子组件传入数据
    在这里插入图片描述
    数据在这里插入图片描述

    展开全文
  • Vue封装highcharts组件

    2021-02-25 16:20:52
    封装highcharts <template> <div> <div :id="Id" class="container" :time="time"></div> <!--time为时间戳,数据改变时更新图表--> </div> </template> <...

    封装highcharts组件

    <template>
      <div>
        <div :id="Id"
             class="container"
             :time="time"></div>
        <!--time为时间戳,数据改变时更新图表-->
      </div>
    </template>
    <script>
      import Highcharts from 'highcharts/highstock' // highchart 基础
      import HighchartsMore from 'highcharts/highcharts-more' // highchart 扩展类
      import SolidGauge from 'highcharts/modules/solid-gauge.js' // highchart 仪表盘
      import HighchartsDrilldown from 'highcharts/modules/drilldown'
      import Highcharts3D from 'highcharts/highcharts-3d'
      HighchartsMore(Highcharts)
      SolidGauge(Highcharts)
      HighchartsDrilldown(Highcharts)
      Highcharts3D(Highcharts)
    
      export default {
      	name: 'HightChart',
      	mounted() {
      		Highcharts.chart(
      			this.Id,
      			Object.assign(
      				{
      					credits: {
      						//去除水印
      						enabled: false,
      					},
      				},
      				this.Option,
      			),
      			this.CallBack || '',
      		)
      	},
      	watch: {
      		time: {
      			handler: function () {
      				Highcharts.chart(
      					this.Id,
      					Object.assign(
      						{
      							credits: {
      								//去除水印
      								enabled: false,
      							},
      						},
      						this.Option,
      					),
      					this.CallBack || '',
      				)
      			},
      			deep: true,
      		},
      	},
      	methods: {},
      	props: {
      		Id: {
      			type: [String],
      		},
      		Option: {
      			type: [Object],
      		},
      		CallBack: {
      			type: [Function],
      		},
      		Come: {
      			type: [String],
      			default: 999,
      		},
      		time: '',
      	},
      	data() {
      		return {}
      	},
      }
    </script>
    <style lang="scss">
      .container {
      	margin: 0 auto;
      	min-width: 310px;
      	height: 400px;
      }
    </style>
    
    
    展开全文
  • vue框架原理

    2021-03-30 11:48:31
    1、vue数据双向绑定原理 采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript ...

    目录

    1、vue数据双向绑定原理

    2、vue自定义指令

    3、父组件传值给子组件

    4、vue v-if尽量与v-for避免一起使用

    5、vue-if与vue-show的区别

    6、vue-router是什么,有那些组件,axios是什么,运行配置在哪里编写?

    1、vue数据双向绑定原理

    采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty() 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。vue的数据双向绑定 将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令(vue中是用来解析 {{}}),最终利用watcher搭起observer和Compile之间的通信桥梁,达到数据变化 —>视图更新;视图交互变化(input)—>数据model变更双向绑定效果。

    2、vue自定义指令

    bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

    inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

    update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。

    componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。

    unbind:只调用一次,指令与元素解绑时调用

    使用:v-foucs

    directives:{
          foucs:{
            inserted: function (el,binding) {// 指令的定义
               / /el为绑定元素,可以对其进行dom操作
               el.foucs()
            }
      }

    3、父组件传值给子组件

    1.父向子传值props

    父组件发送:<child :inputName="name">

    子组件接受:props: {inputName: String,required: true} || props: ["inputName"]

    2、子组件向父组件传值$emit

    <!--自组件-->
     <span>{{childValue}}</span>
    
     <!-- 定义一个子组件传值的方法 -->
    
      <input type="button" value="点击触发" @click="childClick">
    
    
     export default {
      data () {
       return {
        childValue: '我是子组件的数据'
    
       }
    
      },
    
      methods: {
       childClick () {  
    
        this.$emit('childByValue', this.childValue)
    
       }
    
      }
    
     }
    
    
    <!-- 父组件-->
    
    <!-- 引入子组件 定义一个on的方法监听子组件的状态-->
    
    <child v-on:childByValue="childByValue"></child>
    
    methods: {
       childByValue: function (childValue) {
        // childValue就是子组件传过来的值    this.name = childValue
    
       }
    
      }
    
    }

    3、可以通过$parent和$children获取父子组件的参数

    4、全局

    eventBus.$emit("eventName",data)

    eventBus.$on("eventName",function(data){})

    5、父组件调用子组件的方法通过ref,使用this.$refs.paramsName能更快的获取操作子组件属性值或函数

    6.兄弟之间的传值Vuex

    在state里定义数据和属性

    在 mutations里定义函数fn,在页面通过

    this.$store.commit('fn',params)来触发函数,Vuex在这里不做详细介绍了

    4、如何自定一个组件

    Vue.component('base-checkbox', {
      model: {
        prop: 'checked',
        event: 'change'
      },
      props: {
        checked: Boolean
      },
      template: `
        <input
          type="checkbox"
          v-bind:checked="checked"
          v-on:change="$emit('change', $event.target.checked)"
        >
      `
    })

    4、vue v-if尽量与v-for避免一起使用

    v-for比v-if优先级高,所以使用的话,每次v-for都会执行v-if,造成不必要的计算,影响性能,尤其是当之需要渲染很小一部分的时候。

    5、vue-if与vue-show的区别

    相同点或者说功能,都可以动态操作dom元素的显示隐藏

    不同点

      1.手段:v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐;

      2.编译过程:v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换;

      3.编译条件:v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载); 

        v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;

      4.性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗;

      5.使用场景:v-if适合运营条件不大可能改变;v-show适合频繁切换。

    6、vue-router是什么,有那些组件,axios是什么,运行配置在哪里编写?

    1)、vue-router

    路由管理器

    2)、有哪些组件

    el:
     //路由声明式跳转 ,active-class是标签被点击时的样式
    <router-link :to="{path:'/index',query:{paramname:parameval}}">  
    
    //渲染路由的容器
    <router-view name="cname" :key="key"> 
    
    computed接受参数
    
     //缓存组件(Tab页用的多,保持原来状态)
    <keep-alive>    

    methods:

     this.$router.push({
    //compentent name
            name: 'temOp',
    //参数
            params:{
              tem:tem,
              opType: '1'
            }
          });
        },
    
    //路由过滤器
    router.beforeEach((to, from, next) => {
      if (to.meta.title) {
        document.title = to.meta.title + ' - ' + Config.title
      }
      NProgress.start()
      if (getToken()) {
        // 已登录且要跳转的页面是登录页
        if (to.path === '/login') {
          next({ path: '/' })
          NProgress.done()
        } else {
          if (store.getters.roles.length === 0) { // 判断当前用户是否已拉取完user_info信息
            store.dispatch('GetInfo').then(res => { // 拉取user_info
              // 动态路由,拉取菜单
              loadMenus(next, to)
            }).catch((err) => {
              console.log(err)
              store.dispatch('LogOut').then(() => {
                location.reload() // 为了重新实例化vue-router对象 避免bug
              })
            })
          // 登录时未拉取 菜单,在此处拉取
          } else if (store.getters.loadMenus) {
            // 修改成false,防止死循环
            store.dispatch('updateLoadMenus').then(res => {})
            loadMenus(next, to)
          } else {
            next()
          }
        }
      } else {
        /* has no token*/
        if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入
          next()
        } else {
          next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
          NProgress.done()
        }
      }
    })

    3)、axios

    异步请求一种数据方法,与接口交互的时候使用,可以自己封装一个request.js

    //拦截器
    axios.interceptor.request.user(config =>{
          if (getToken()) {
          config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
        }
    //设置请求参数格式
        config.headers['Content-Type'] = 'application/json'
        return config
    },error => {
          Promise.reject(error)
    }
    )
    
    
    //返回数据的拦截
    axios.interceptor.request.response(config => {
        const code = response.status
        if (code < 200 || code > 300) {
          Notification.error({
            title: response.message
          })
          return Promise.reject('error')
        } else {
          return response.data
        }
    },error => {
         let code = 0
        try {
          code = error.response.data.status
        } catch (e) {
          if (error.toString().indexOf('Error: timeout') !== -1) {
            Notification.error({
              title: '网络请求超时',
              duration: 5000
            })
            return Promise.reject(error)
          }
        }
        if (code) {
          if (code === 401) {
            MessageBox.confirm(
              '登录状态已过期,您可以继续留在该页面,或者重新登录',
              '系统提示',
              {
                confirmButtonText: '重新登录',
                cancelButtonText: '取消',
                type: 'warning'
              }
            ).then(() => {
              store.dispatch('LogOut').then(() => {
                location.reload() // 为了重新实例化vue-router对象 避免bug
              })
            })
          } else if (code === 403) {
            router.push({ path: '/401' })
          } else {
            const errorMsg = error.response.data.message
            if (errorMsg !== undefined) {
              Notification.error({
                title: errorMsg,
                duration: 5000
              })
            }
          }
        } else {
          Notification.error({
            title: '接口请求失败',
            duration: 5000
          })
        }
        return Promise.reject(error)
    }
    )
    

     

     

     

     

    展开全文
  • vue封装ajax请求

    2021-10-12 16:34:45
    vue封装ajax请求(使用axios) 在vue项目中要请求接口,可以通过使用axios来完成ajax请求。 安装方法(使用vue-cli创建的项目一般是已经安装好的,无需再次安装) 使用cdn: <script src=...

    vue封装ajax请求(使用axios)

    在vue项目中要请求接口,可以通过使用axios来完成ajax请求。

    安装方法(使用vue-cli创建的项目一般是已经安装好的,无需再次安装)

    使用cdn:

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    

    <script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
    

    使用npm:

    $ npm install axios
    

    使用yarn:

    $ yarn add axios
    

    使用方法:

    this.axios.get(apiUrl).then((reponse) => {
    	console.log(reponse.data)
    })
    
    this,$http.get(apiUrl).then((reponse) => {
    	console.log(reponse.data)
    })
    

    封装

    上述方法为简单运用,或在源码中使用。在vue框架中我们通常将axios的请求拦截和响应拦截封装在一个js文件中,将请求接口的方法也封装在一个js文件中,方便复用和后期管理,下面我们就开始正文:

    1、封装请求拦截和响应拦截
    在src目录下创建util文件夹,在util文件夹下创建request.js文件:
    创建在这里插入图片描述
    进入到request.js文件中,首先引用axios,创建axios实例,看代码:

    import axios form "axios"
    
    // 创建axios实例,设置配置得默认值
    const instance = axios.create({
    	baseUrl: 'xxx',   // 这里写接口的http地址,
    	timeout: 20000,  // 设置请求超时的默认值 
    })
    // 设置请求拦截器
    instance.interceptors.request.use(
    	config => {
    		// 判断当前是否有token,有则在请求头上加上token
    		if (localStorage.getItem('token')) {
    			config.headers.Authorization = localStorage.getItem('token')
    		}
    		return config
    	},
    	error => {
    		// 请求错误进行拦截并返回错误信息
    		console.log(error)
    		return Promise.reject(error)
    	}
    )
    // 设置响应拦截
    instance,interceptors.response.use(
    	reponse => {
    		const res = response.data
    		return res
    	},
    	error => {
    		return Promise.reject(error)
    	}	
    )
    // 向外暴露axios实例
    export default instance
    

    至此,axios的配置已完成,下面在封装请求接口方法的文件中调用request.js文件中暴露出来的axios实例,向其传递相关参数。

    2、封装请求方法
    首先在src目录下创建apis文件夹,再创建index.js文件:
    在这里插入图片描述
    进入到index.js文件中,将暴露出的axios实例引用下来,创建一个请求函数,向axios实例传递参数,所需参数为:

    {
    	url: '/home', // 请求路径
    	method: 'get', // 请求方法 ,post、get、del等
    	params, // 请求数据
    }
    

    具体代码如下:

    import request form '@/utils/request'
    
    export function getHomeInfo(params) {
    	return request({
    		url: '/home',
    		method: 'get',
    		params
    	})
    }
    

    通过export将方法暴露出去,封装完成!
    在组件中的调用:

    <template>
    	<div>
    		{{message}}
    	</div>
    </template>
    
    <script>
    import { getHomeInfo } form '@/apis/index.js'
    export default {
    	data() {
    		return {
    			message: '',
    		}
    	},
    	mounted() {
    		this.getInfo()
    	},
    	methods: {
    		async getInfo() {
    			const obj = {
    				id: '001',
    				username: 'tom'
    			}
    			const res = await getHomeInfo(obj)
    			this.message = res.data.msg	
    		}
    	}
    };
    </script>
    

    完成!

    相关参考

    https://www.runoob.com/vue3/vue3-ajax-axios.html

    展开全文
  • ● 组件可以扩展HTML元素,封装可重用代码 ● 在较高层面上,组件是自定义元素,Vue.js的编译器为他添加特殊功能 ● 有些情况下,组件也可以表现用 is特性进行了扩展的原生的HTML元素 ● 所有的Vue组件同时也都是...
  • Vue(框架)介绍​

    2021-10-22 13:34:26
    前言,关于Vue框架 很多地方都称Vue框架,按我的理解其实叫做Vue类库更合适,这边标题遵循传统叫法,称Vue框架,并且在后面补充加了个括号。 介绍Vue之前,必须先介绍Node.js,Vue的源代码是在Node下面编译成通常...
  • Vue框架

    千次阅读 2021-02-15 08:39:30
    vue框架是一个渐进式前端框架,可以提高前端开发效率。 渐进式:可以选择性的使用该框架的一个或一些组件,这些组件的使用不需要将框架全部组件都应用;而且 用了这些组件也不要求你的系统全部都使用该框架Vue是...
  • Vue 封装一个自己写的组件或方法

    千次阅读 2020-12-20 23:44:49
    1.首先写好里面的模板及传递过来的参数2...在main.js里面引入 然后vue.use(引入的名称)Vue封装一个js引用Vue封装的js里面可以是个对象 也可以是方法export 和 export default的区别是 在一个页面中 export可以有很多...
  • vue请求接口的封装

    2020-12-20 06:09:16
    import api from './api';import request from'./request';//获取url上的rest参数,返回参数列表 /{userId}/{roleId} => ['userId', 'roleId']functiongetUrlParams(url) {return (url.match(/\{(\w+)\}/g) || []...
  • vue框架项目打包

    2021-03-24 11:38:55
    解决路径的代码: 在vue.config.js 文件中写下以下代码(文件就是以前写跨域,配置路径名,热更新的代码文件夹) module.exports = { publicPath: "./", // 构建好的文件输出到哪里 outputDir: "dist", ...
  • VUE前端框架

    2021-11-16 20:12:07
    MVVM框架 入门案例 创建HTML文件,并引入vue.js 练习 Vue的基础语法 –1,运算符&函数 –2,解析类型丰富的data –3,data的三种写法 二,Vue的指令 –1,概述 –2,v-model & v-cloak -3,v-if &...
  • #vue# 网络请求之接接口(比较详细) 一. 后端接口文档的解析 二. 接接口之前的准备工作(post) 三. 接接口的工程化封装(拼接域名及地址) 四. 几种接接口的情况 (1)在本页(当前页)数据渲染 (2)不同页(跳转...
  • 什么是Vue.js框架

    2021-05-08 16:03:03
    前文我们和大家分享的是Vue.js简易安装和快速入门,本文我们主要和大家分享Vue.js框架是什么,为什么要选择它?这篇文章为大家介绍目前前端技术使用的趋势,以及Vue.js的优点和适用场景等,具有一定的参考价值,感...
  • VUE自定义组件封装

    2021-03-11 11:13:39
    VUE自定义组件封装 在开发过程中,需要重新封装一下前端框架中的组件,从而适用于自己的项目,便于重用。 这次用的前端组件库是primevue。但是这个框架的日历控件有个bug,同时使用selectionMode=“range” :...
  • Vue项目中封装axios统一管理http请求

    千次阅读 多人点赞 2021-04-21 17:30:30
    在使用Vue.js框架开发前端项目时,会经常发送ajax请求服务端接口,在开发过程中,需要对axios进一步封装,方便在项目中的使用。 2、Vue项目结构 在本地创建Vue项目,目录结构如下: - public 静态资源文件 - src ...
  • VUE 3.0代码结构框架

    2021-02-02 14:39:04
    VUE结构框架 VUE脚手架目前采用VUE全家桶的基础套餐,然后各个项目在此 基础上可添加项目所需要的库和依赖,此脚手架的基础套餐为:VUE+ Element+Webpack+axios,VUE采用的是2.0版本。 其脚手架的结构如下: ├──...
  • 组件使用的方式不够便利,封装成工具函数方式。 大致实现步骤: 先把布局,和三种情况的显示,完成。 定义组件:src/components/library/message.vue <template> <transition name='down'> <...
  • 全局概览Vue运行内部运行机制 总览图:初始化及挂载在new Vue()之后。Vue会调用_init函数进行初始化,也就是这里的init过程,它会初始化生命周期、事件、props、methods、data、computed与watch等。其中最重要的是...
  • 封装Vue组件库

    2021-01-17 16:36:31
    _snapshots__/input.test.js.snap文件中 执行yarn test -u可以把快照文件删掉重新生成一个快照 Rollup打包 Rollup是一个模块打包器 Rollup支持Tree-Shaking 打包的结果比Webpack要小 开发框架/组件库的时候使用...
  • Vue 弹出框组件的完整封装过程

    千次阅读 2020-12-23 09:04:58
    引言因为项目搬砖需要,笔者从 2019 年 11 月份开始学习 Vue.js,在完整地敲了一遍 vue-admin 框架中的用户管理 Demo 、断点跟踪前端调用流程、并摸清楚了 Vue.js 的开发套路后,总算可以出师了。写作本文有两个原因...
  • Vue 项目封装表单类型组件 iform.vue 当我们在做Vue项目时,有时候项目很大,页面功能比较多时,很多控件堆在一起,很是臃肿,管理起来很麻烦。因此,我们就需要封装一些组件,达到简洁高效、可复用的效果。本章节...
  • 最近使用vue进行前后端分离开发微信公众号,不断摸索踩坑之后,...axios封装和api接口的统一管理 打包后生成很大的.map文件的问题 UI库的按需加载 如何优雅的只在当前页面中覆盖ui库中组件的样式 2.列表进入详情页传.
  • 前端采用vue,但是再项目开发过程中遇到一个比较麻烦的问题,项目工期比较紧,页面要美观好看,如果自己封装组件的话用时比较长,使用第三方框架成了不错的选择,在这里我总结了一下常用的vue UI框架,希望对大家...
  • vue知识框架整理

    2021-07-17 13:36:15
    Vue是一套轻量级的前端渐进式框架,"渐进式"可以理解为按需引入,根据业务场景逐步从简单实现到复杂实现。 2)实例化 new Vue()的过程就叫函数的实例化。 Vue构造器要求在实例化时传入一个选项对象,选项对象包含...
  • 什么是面包屑导航? 面包屑包的烧鸡吗? 真实的面包屑导航 ...由来:面包屑导航(BreadcrumbNavigation)这个概念来自童话故事“汉赛尔和格莱特”,当汉赛尔和...仿照elemenUI组件封装一个 一抹一样的面包屑导航 .
  • 通过代码搭建Vue项目 后台框架 IDEA 搭建SpringBoot项目 准备必要的js文件 首先我们需要定义一个全局变量,在后面我们需要改动地址就比较方便了 1、global-variable.js //全局变量文件 //baseURL:访问后台路径 ...
  • 从零搭建vue框架

    2021-10-11 16:55:36
    框架搭建 vue-cli创建项目 命令:vue create newnft 根据需要回车选择 打包路径配置 1.router.js配置 const router = new VueRouter({ mode: 'history', base: 'mobile',//路径配置 routes }) 2.vue.config.js...
  • 针对VueJs,那么网络框架首选就是axios了。那就针对axios来请求后台api来说说。对于前后端分离的开发方式,一般后端都是采用Restful api的形式来提供给我们对应的接口,这样做的一点好处是,一套后端api(如果写得够...
  • vue框架及生命周期

    2021-08-19 19:46:37
    vue框架 vue框架的核心:数据驱动框架 vue可以为复杂的单页应用提供了驱动 vue是一种渐进式框架,根据自己需求,选择框架中的工具 React与Angle上手较难,使用场景有限,开发灵活度较低,一个好的工具可以让你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,578
精华内容 13,031
关键字:

vue如何封装框架

vue 订阅