더 많은 기술을 습득할수록 Vue 프로그래밍 효율성이 높아집니다. 작업을 잘하려면 먼저 도구를 연마해야 합니다. 이 글은 여러분에게 필수적인 Vue 운영 기술을 공유할 것입니다. 여러분에게 도움이 되기를 바랍니다!
(학습 영상 공유: vue 영상 튜토리얼)
js
에서는 일반적으로 이벤트를 바인딩하여 키 코드를 가져온 다음 event
속성에서 keyCode
를 사용하여 키 코드를 가져옵니다. codejs
中我们通常通过绑定一个事件,去获取按键的编码,再通过 event
中的 keyCode
属性去获得编码let button = document.querySelector('button') button.onkeyup = function (e) { console.log(e.key) if (e.keyCode == 13) { console.log('我是回车键') } }
vue
中给一些常用的按键提供了别名,我们只要在事件后加上响应的别名即可vue
中常见别名有:up/向上箭头
、down/向下箭头
、left/左箭头
、right/右箭头
、space/空格
、tab/换行
、esc/退出
、enter/回车
、delete/删除
// 只有按下回车键时才会执行 send 方法 <input v-on:keyup.enter="send" type="text">
Vue
中未提供别名的键,可以使用原始的 key
值去绑定,所谓 key
值就是 event.key
所获得的值key
值是单个字母的话直接使用即可,如果是由多个单词组成的驼峰命名,就需要将其拆开,用 -
连接// 只有按下q键时才会执行send方法 <input v-on:keyup.Q="send" type="text"> // 只有按下capslock键时才会执行send方法 <input v-on:keyup.caps-lock="send" type="text">
ctrl
、alt
、shift
这些比较复杂的键使用而言,分两种情况keydown
时,我们可以直接按下修饰符即可触发keyup
时,按下修饰键的同时要按下其他键,再释放其他键,事件才能被触发。// keydown事件时按下alt键时就会执行send方法 <input v-on:keydown.Alt="send" type="text"> // keyup事件时需要同时按下组合键才会执行send方法 <input v-on:keyup.Alt.y="send" type="text">
Vue.config.keyCodes.自定义键名=键码
的方式去进行定义// 只有按下回车键时才会执行send方法 <input v-on:keydown.autofelix="send" type="text"> // 13是回车键的键码,将他的别名定义为autofelix Vue.config.keyCodes.autofelix=13
viewerjs
是一款非常炫酷的图片预览插件viewerjs
扩展npm install viewerjs --save
//引入 import Vue from 'vue'; import 'viewerjs/dist/viewer.css'; import Viewer from 'v-viewer'; //按需引入 Vue.use(Viewer); Viewer.setDefaults({ 'inline': true, 'button': true, //右上角按钮 "navbar": true, //底部缩略图 "title": true, //当前图片标题 "toolbar": true, //底部工具栏 "tooltip": true, //显示缩放百分比 "movable": true, //是否可以移动 "zoomable": true, //是否可以缩放 "rotatable": true, //是否可旋转 "scalable": true, //是否可翻转 "transition": true, //使用 CSS3 过度 "fullscreen": true, //播放时是否全屏 "keyboard": true, //是否支持键盘 "url": "data-source", ready: function (e) { console.log(e.type, '组件以初始化'); }, show: function (e) { console.log(e.type, '图片显示开始'); }, shown: function (e) { console.log(e.type, '图片显示结束'); }, hide: function (e) { console.log(e.type, '图片隐藏完成'); }, hidden: function (e) { console.log(e.type, '图片隐藏结束'); }, view: function (e) { console.log(e.type, '视图开始'); }, viewed: function (e) { console.log(e.type, '视图结束'); // 索引为 1 的图片旋转20度 if (e.detail.index === 1) { this.viewer.rotate(20); } }, zoom: function (e) { console.log(e.type, '图片缩放开始'); }, zoomed: function (e) { console.log(e.type, '图片缩放结束'); } })
<template> <div> <viewer> <img :src="cover" style="cursor: pointer;" height="80px"> </viewer> </div> </template> <script> export default { data() { return { cover: "//www.autofelix.com/images/cover.png" } } } </script>
<template> <div> <viewer :images="imgList"> <img v-for="(imgSrc, index) in imgList" :key="index" :src="imgSrc" /> </viewer> </div> </template> <script> export default { data() { return { imgList: [ "//www.autofelix.com/images/pic_1.png", "//www.autofelix.com/images/pic_2.png", "//www.autofelix.com/images/pic_3.png", "//www.autofelix.com/images/pic_4.png", "//www.autofelix.com/images/pic_5.png" ] } } } </script>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>跑马灯</title> <style type="text/css"> #app { padding: 20px; } </style> </head> <body> <div id="app"> <button @click="run">应援</button> <button @click="stop">暂停</button> <h3>{{ msg }}</h3> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2.7.0/dist/vue.min.js"></script> <script> new Vue({ el: "#app", data: { msg: "飞兔小哥,飞兔小哥,我爱飞兔小哥~~~", timer: null // 定时器 }, methods: { run() { // 如果timer已经赋值就返回 if (this.timer) return; this.timer = setInterval(() => { // msg分割为数组 var arr = this.msg.split(''); // shift删除并返回删除的那个,push添加到最后 // 把数组第一个元素放入到最后面 arr.push(arr.shift()); // arr.join('')吧数组连接为字符串复制给msg this.msg = arr.join(''); }, 100) }, stop() { //清除定时器 clearInterval(this.timer); //清除定时器之后,需要重新将定时器置为null this.timer = null; } } }) </script> </html>
DOM
中<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>倒计时</title> </head> <body> <div id="app"> <div>抢购开始时间:{{count}}</div> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2.7.0/dist/vue.min.js"></script> <script> new Vue({ el: "#app", data() { return { count: '', //倒计时 seconds: 864000 // 10天的秒数 } }, mounted() { this.Time() //调用定时器 }, methods: { // 天 时 分 秒 格式化函数 countDown() { let d = parseInt(this.seconds / (24 * 60 * 60)) d = d < 10 ? "0" + d : d let h = parseInt(this.seconds / (60 * 60) % 24); h = h < 10 ? "0" + h : h let m = parseInt(this.seconds / 60 % 60); m = m < 10 ? "0" + m : m let s = parseInt(this.seconds % 60); s = s < 10 ? "0" + s : s this.count = d + '天' + h + '时' + m + '分' + s + '秒' }, //定时器没过1秒参数减1 Time() { setInterval(() => { this.seconds -= 1 this.countDown() }, 1000) }, } }) </script> </html>
Vue
中其实很简单,只要使用 vue-contextmenujs
插件即可vue-contextmenujs
插件npm install vue-contextmenujs
//引入 import Vue from 'vue'; import Contextmenu from "vue-contextmenujs" Vue.use(Contextmenu);
<i class="icon"></i>
可以给选项添加图标style
标签自定义选项的样式disabled
属性禁止选项可以点击divided:true
设置选项的下划线children
设置子选项<style> .custom-class .menu_item__available:hover, .custom-class .menu_item_expand { background: lightblue !important; color: #e65a65 !important; } </style> <template> <div style="width:100vw;height:100vh" @contextmenu.prevent="onContextmenu"></div> </template> <script> import Vue from 'vue' import Contextmenu from "vue-contextmenujs" Vue.use(Contextmenu); export default { methods: { onContextmenu(event) { this.$contextmenu({ items: [ { label: "返回", onClick: () => { // 添加点击事件后的自定义逻辑 } }, { label: "前进", disabled: true }, { label: "重载", divided: true, icon: "el-icon-refresh" }, { label: "打印", icon: "el-icon-printer" }, { label: "翻译", divided: true, minWidth: 0, children: [{ label: "翻译成中文" }, { label: "翻译成英文" }] }, { label: "截图", minWidth: 0, children: [ { label: "截取部分", onClick: () => { // 添加点击事件后的自定义逻辑 } }, { label: "截取全屏" } ] } ], event, // 鼠标事件信息 customClass: "custom-class", // 自定义菜单 class zIndex: 3, // 菜单样式 z-index minWidth: 230 // 主菜单最小宽度 }); return false; } } }; </script>
vue-print-nb
插件vue-print-nb
插件npm install vue-print-nb --save
import Vue from 'vue' import Print from 'vue-print-nb' Vue.use(Print);
v-print
指令即可启动打印功能<div id="printStart"> <p>红酥手,黄縢酒,满城春色宫墙柳。</p> <p>东风恶,欢情薄。</p> <p>一怀愁绪,几年离索。</p> <p>错、错、错。</p> <p>春如旧,人空瘦,泪痕红浥鲛绡透。</p> <p>桃花落,闲池阁。</p> <p>山盟虽在,锦书难托。</p> <p>莫、莫、莫!</p> </div> <button v-print="'#printStart'">打印</button>
jsonp
是 解决跨域
的主要方式之一vue
中使用 jsonp
其实还是很重要的jsonp
扩展npm install vue-jsonp --save-dev
// 在vue2中注册服务 import Vue from 'vue' import VueJsonp from 'vue-jsonp' Vue.use(VueJsonp) // 在vue3中注册服务 import { createApp } from 'vue' import App from './App.vue' import VueJsonp from 'vue-jsonp' createApp(App).use(VueJsonp).mount('#app')
jsonp
请求数据后,回调并不是在 then
中执行callbackName
中执行,并且需要挂载到 window
<script> export default { data() {...}, created() { this.getUserInfo() }, mounted() { window.jsonpCallback = (data) => { // 返回后回调 console.log(data) } }, methods: { getUserInfo() { this.$jsonp(this.url, { callbackQuery: "callbackParam", callbackName: "jsonpCallback" }) .then((json) => { // 返回的jsonp数据不会放这里,而是在 window.jsonpCallback console.log(json) }) } } } </script>
vue
는 일반적으로 사용되는 일부 키에 대한 별칭을 제공합니다. 이벤트 뒤에 응답 별칭을 추가합니다. vue
의 일반적인 별칭은 위쪽/위쪽 화살표
, 아래쪽/아래쪽 화살표
, left/입니다. 왼쪽 화살표
, 오른쪽/오른쪽 화살표
, 공백/공백
, 탭/줄 바꿈
, esc/Exit code>, <code>enter/Enter
, delete/Delete
rrreee🎜 Vue
에서 별칭을 제공하지 않는 키의 경우 다음을 사용할 수 있습니다. 바인딩할 원래 key
값 소위 key
값은 event.key
🎜🎜If key 에서 얻은 값입니다. code> 값이 한 글자이면 바로 사용 가능합니다. 여러 단어로 구성된 카멜케이스 이름이라면 분리해서 <code>-
로 연결해야 합니다 🎜🎜rrreee🎜🎜 시스템 수정의 경우 ctrl
, alt
및 shift
와 같은 더 복잡한 키를 사용하는 경우 두 가지 상황이 있습니다🎜🎜 이러한 키는 길게 누르기 동시에 다른 키를 눌러 조합 단축키를 형성하세요🎜🎜트리거 이벤트가 keydown
일 때 수정자를 직접 눌러 트리거할 수 있습니다🎜🎜트리거 이벤트가 keyup 수정자 키를 누를 때 이벤트가 트리거되기 전에 다른 키를 동시에 누른 다음 다른 키를 놓아야 합니다. 🎜🎜rrreee🎜🎜물론 키 별칭도 맞춤 설정할 수 있습니다🎜🎜 Vue.config.keyCodes를 통해 맞춤 키 이름 = 키 코드
를 통해 정의할 수 있습니다🎜🎜rrreeeviewerjs
는 매우 멋진 이미지 미리보기 플러그인입니다.🎜🎜이미지 확대, 축소, 회전, 드래그, 전환 등의 기능 지원 🎜🎜viewerjs
확장 설치 🎜🎜rrreee🎜🎜기능 소개 및 구성 🎜🎜rrreee🎜🎜이미지 미리보기 플러그인 사용 🎜🎜단일 이미지에 사용🎜🎜rrreee 🎜🎜 여러 장의 사진을 활용하세요🎜🎜rrreeeDOM
에 할당한다는 의미입니다. 프로젝트를 진행하다 보면 브라우저 기본값 대신 마우스 오른쪽 버튼으로 나타나는 옵션을 맞춤 설정해야 할 때가 있습니다. 마우스 오른쪽 버튼 클릭 옵션🎜🎜오른쪽 클릭 메뉴를 구현하는 방법은 실제로 Vue
에서 매우 간단합니다. 그냥 vue-contextmenujs
플러그인을 사용하세요🎜🎜vue-contextmenujs 플러그인 설치 🎜🎜rrreee🎜🎜Introduction🎜🎜rrreee🎜🎜사용 방법🎜🎜할 수 있습니다 옵션에 아이콘을 추가하려면 <i class="icon"></i>
를 사용하세요🎜🎜 style
태그를 사용하여 옵션 스타일을 맞춤설정할 수 있습니다 🎜🎜disabled
속성을 사용하여 옵션을 비활성화하고 클릭할 수 있습니다🎜🎜divided:true
를 사용하여 Underline 옵션을 설정할 수 있습니다🎜🎜를 사용할 수 있습니다 children
하위 옵션 설정🎜🎜rrreee인쇄 기능🎜🎜🎜 많은 프로젝트에서 흔히 볼 수 있는 웹페이지 인쇄 기능을 지원합니다🎜 🎜인쇄 기능을 사용하려면 Vue에서 기능을 사용하려면 vue-print-nb
플러그인을 사용할 수 있습니다🎜🎜vue-print-nb
플러그인을 설치하세요🎜🎜rrreee🎜🎜인쇄 소개 service🎜🎜rrreee 🎜🎜Use🎜🎜v-print
명령을 사용하여 인쇄 기능을 시작하세요🎜🎜rrreeeJSONP 요청🎜🎜🎜 jsonp
이는 도메인 간 문제를 해결
하는 주요 방법 중 하나입니다🎜🎜따라서 vue에서 <code>jsonp
를 사용하는 방법을 배우는 것이 실제로 매우 중요합니다.
🎜🎜jsonp
확장 설치🎜🎜rrreee🎜🎜등록 서비스🎜🎜rrreee🎜🎜사용 방법🎜🎜jsonp
를 사용하여 요청한 후에는 주의해야 합니다. 데이터인 경우 콜백은 then
에 없습니다 🎜🎜 대신 사용자 정의 callbackName
에서 실행되며 window
개체에 마운트되어야 합니다 🎜 🎜rrreee🎜【관련 동영상 튜토리얼 추천: 🎜 Vuejs 입문 튜토리얼🎜、🎜웹 프론트엔드 시작하기🎜】🎜위 내용은 [정리와 공유] Vue 개발에 꼭 필요한 운영 스킬, 모아서 모아보세요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!