整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

这 10 个技巧,助你早日精通 Vue

我比较喜欢使用 Vue 来开发,所以有时会深入研究其功能和特性。通过这篇文章,向你们介绍十个很酷的窍门和技巧,以帮助大家成为更好的 Vue 开发者。

插槽语法更漂亮

随着Vue 2.6的推出,已经引入了插槽的简写方式,之前简写可用于事件(例如,@click表示v-on:click事件)或冒号表示方式用于绑定(:src)。例如,如果有一个表格组件,则可以按以下方式使用此功能:

$on(‘hook:’)

如果要在created或mounted方法中定义自定义事件侦听器或第三方插件,并且需要在beforeDestroy方法中将其删除以免引起任何内存泄漏,则可以使用此功能。使用$on(‘hook:’)方法,我们可以仅使用一种生命周期方法(而不是两种)来定义/删除事件。

prop 验证

你可能已经知道可以将props验证为原始类型,例如字符串,数字甚至对象。我们还可以使用自定义验证器,例如,如果要针对字符串列表进行验证:

动态指令参数

Vue 2.6 的最酷功能之一是可以将指令参数动态传递给组件。假设有一个按钮组件,并且在某些情况下想监听单击事件,而在其他情况下想监听双击事件。这就是动态指令派上用场的地方了:

重用同一路由的组件

有时,我们不同路由共用某些时,如果在这些路由之间切换,则默认情况下,共享组件将不会重新渲染,因为Vue 出于性能原因会重用该组件。但是,如果我们仍然希望重新渲染这些组件,则可以通过在路由器视图组件中提供:key属性来实现重新渲染。

从父类到子类的所有 props

这是一个非常酷的功能,可将所有prop从父组件传递到子组件。如果我们有另一个组件的包装器组件,这将特别方便。因为,我们不必一个一个将prop传递给子组件,而是一次传递所有prop:

上面的可以代替下面的做法

从父类到子类的所有事件侦听器

如果子组件不在父组件的根目录下,则可以将所有事件侦听器从父组件传递到子组件,如下所示:

如果子组件位于其父组件的根目录下,则默认情况下它将获得那些组件,因此不需要此小技巧。

$createElement

默认情况下,每个Vue实例都可以访问$createElement方法来创建和返回虚拟节点。例如,可以利用它在可以通过v-html指令传递的方法中使用标记。在函数组件中,可以将此方法作为渲染函数中的第一个参数访问。

使用 JSX

由于Vue CLI 3默认支持使用JSX,因此现在(如果愿意)我们可以使用JSX编写代码(例如,可以方便地编写函数组件)。如果尚未使用Vue CLI 3,则可以使用babel-plugin-transform-vue-jsx获得JSX支持。

自定义 v-model

默认情况下,v-model是@input事件监听器和:value props上的语法糖。但是,我们可以在Vue组件中指定一个模型属性,以定义使用什么事件和值

总结

希望这些窍门和技巧对你有所帮助,如果你也知道哪些技巧,欢迎留言。


原文:https://www.telerik.com/blogs/12-tips-and-tricks-to-improve-your-vue-projects

blob转成file

利用new File();

function blobToFile(blob, filename, type) {
	return new File([blob], filename, { type })
}

blobToFile('test info', 'test', 'text/plain' )

输出如下

更进一步了解可阅读MDN File - Web API 鎺ュ彛鍙傝€� | MDNMDN Web DocsMDN logoMozilla logo

Blob() - Web API 接口参考 | MDN讲解

将file转换成DataURL

利用URL.createObjectURL()

<input type="file" id="file">
<img id="img">
let img = document.getElementById('img')
let file = document.getElementById('file')
file.onchange = function () {
let imgFile = this.files[0]
img.src = URL.createObjectURL(imgFile)
	img.onload = function () {
		URL.revokeObjectURL(this.src)
	}
}

更进一步了解可阅读 MDN URL.createObjectURL() - Web API 鎺ュ彛鍙傝€� | MDNMDN Web DocsMDN logoMozilla logo 讲解

利用FileReader.readAsDataURL()

let img = document.getElementById('img')
let file = document.getElementById('file')
file.onchange = function (e) {
let imgFile = this.files[0]
let fileReader = new FileReader()
fileReader.readAsDataURL(imgFile)
  fileReader.onload = function () {
  	img.src = this.result
  }
}

更进一步了解可阅读FileReader - Web API 鎺ュ彛鍙傝€� | MDNMDN Web DocsMDN logoMozilla logo简介

将DataURL转成file

function dataURLToFile (dataUrl, fileName) {
const dataArr = dataUrl.split(',')
const mime = dataArr[0].match(/:(.*);/)[1]
const originStr = atob(dataArr[1])
	return new File([originStr], fileName, { type: mime })
}
dataURLToFile('data:text/plain;base64,YWFhYWFhYQ==', '测试文件')
// File {name: '测试文件', lastModified: 1640784525620, lastModifiedDate: Wed Dec 29 2021 21:28:45 GMT+0800 (中国标准时间), webkitRelativePath: '', size: 7, …}

复杂处理方式如下

function dataURLToFile (dataUrl, filename) {
const dataArr = dataUrl.split(',')
const mime = dataArr[0].match(/:(.*);/)[1]
const originStr = atob(dataArr[1])
let n = originStr.length
const u8Arr = new Uint8Array(n)
  while (n--) {
  	u8Arr[n] = originStr.charCodeAt(n)
  }
return new File([u8Arr], filename, { type: mime })
}
dataURLToFile('data:text/plain;base64,YWFhYWFhYQ==', '测试文件')
console.log(dataURLToFile('data:text/plain;base64,YWFhYWFhYQ==','测试文件'));
// File {name: '测试文件', lastModified: 1640784866937, lastModifiedDate: Wed Dec 29 2021 21:34:26 GMT+0800 (中国标准时间), webkitRelativePath: '', size: 7, …}


将canvas转成DataURL

利用canvas.toDataURL()

// html
<input type="file" accept="image/*" id="file">
// js
document.querySelector('#file').onchange = function () {
  canvasToDataURL(this.files[0]).then(res => console.log(res))
 }
function canvasToDataURL (file) {
return new Promise(resolve => {
    const img = document.createElement('img')
    img.src = URL.createObjectURL(file)
    img.onload = function () {
    const canvas = document.createElement('canvas')
    canvas.width = img.width
    canvas.height = img.height
    const ctx = canvas.getContext('2d')
    ctx.drawImage(img, 0, 0)
    resolve(canvas.toDataURL('image/png', 1))
    }
})
}


将DataURL转成canvas

function dataUrlToCanvas (dataUrl) {
return new Promise(resolve => {
    const img = new Image()
    img.src = dataUrl
    img.onload = function () {
    const canvas = document.createElement('canvas')
    canvas.width = this.width
    canvas.height = this.height
    const ctx = canvas.getContext('2d')
    ctx.drawImage(this, 0, 0)
    resolve(canvas)
    }
})
}
const dataUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUh...'
dataUrlToCanvas(dataUrl)
.then(res => document.body.appendChild(res))


将canvas转成blob

利用canvas.toBlob()


// html
<input type="file" accept="image/*" id="file">
// js
document.querySelector('#file').onchange = function () {
canvasToDataURL(this.files[0])
.then(res => console.log(res))
}
function canvasToDataURL (file) {
return new Promise(resolve => {
  const img = document.createElement('img')
  img.src = URL.createObjectURL(file)
  img.onload = function () {
  const canvas = document.createElement('canvas')
  canvas.width = img.width
  canvas.height = img.height
  const ctx = canvas.getContext('2d')
  ctx.drawImage(img, 0, 0)
  canvas.toBlob(function (e) {
  	resolve(e)
  }, 'image/png', 1)
}
})


将canvas转成file

将canvas转成Blob,然后将Blob转成file即可,可看最开始的文件类型转换流程图。

或将canvas转成dataURL,然后将dataURL转成file即可,可看最开始的文件类型转换流程图。

blob转arrayBuffer

利用FileReader.readAsArrayBuffer()

function blobToArrayBuffer (blob, callback) {
const reader = new FileReader()
reader.readAsArrayBuffer(blob)
reader.onload = function () {
	callback(this.result)
}
}
let blob = new Blob([1, 2, 3, 4, 5])
blobToArrayBuffer(blob, (arrayBuffer) => { console.log(arrayBuffer) })
// ArrayBuffer(5)


arrayBuffer转blob

利用new Blob()

function arrayBufferToBlob (arrayBuffer, type) {
	return new Blob([arrayBuffer], { type })
}
blobToArrayBuffer(new Blob([1, 2, 3, 4, 5]), (arrayBuffer) => {
console.log(arrayBufferToBlob(arrayBuffer, 'text/plain'))
// Blob {size: 5, type: 'text/plain'}
})

————————————————

版权声明:本文为CSDN博主「定栓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_44116302/article/details/122064841

最近在学习数据分析方面的问题,突然遇到了图形显示的问题,一如既往的将figure对象传入前端,用模板来实现,结局往往是那么的差强人意,显示不出来图像,.show()也不行,最后研究了一下,图像的传递方式采用BytesIO模块和Base64编码来解决了这个问题,下面就是我的成果,请大神们指点…………

from io import BytesIO

import base64

def fig_to_html(img):

# 转成图片的步骤

sio = BytesIO()

img.savefig(sio, format='png')

data = base64.encodebytes(sio.getvalue()).decode()

html = '''

<img src="data:image/png;base64,{}" />

'''

return html.format(data)