❝放弃就代表了结束
❞
前言
哥们小马新交了个女朋友,第二天带着她去逛商场,经过一家服装店
门口的女店员惊讶的说一句:“你这么快又换了一个对象呀?”
小马脸一下子红了起来,正想跟女朋友解释
哪知道女朋友尴尬的回应了一句,“是呀”
对象真的有这么好换吗?
要不,咱们也来换换 (¬_¬)瞄
开玩笑的啦,(#^.^#)
对象是没得换了,换换Tabs如何?
1 Tabs
跳转拦截 before-leave
此路是我开,
此树是我栽树,
要想从此过,
留下买路财!
代码片段
props: {
beforeLeave: Function
},
setCurrentName(value) {
const changeCurrentName = () => {
this.currentName = value;
this.$emit('input', value);
};
// 传递beforeLeave函数props
if (this.currentName !== value && this.beforeLeave) {
const before = this.beforeLeave(value, this.currentName);
// beforeLeave函数执行返回promise被resolve
if (before && before.then) {
before
.then(() => {
changeCurrentName();
this.$refs.nav && this.$refs.nav.removeFocus();
});
// beforeLeave函数执行返回true
} else if (before !== false) {
changeCurrentName();
}
} else {
// 不传递beforeLeave函数props
changeCurrentName();
}
}
},
技巧解析
❝props命名,小驼峰beforeLeave,传递属性用短线before-leave
❞
emit命名,短线before-leave,触发事件也用短线@before-leave
Prop的大小写 传送门
事件名 传送门
❝本来标签可以自由切换,后来来了一打劫的before-leave,非要收买路财
❞
return true|Promise可以顺利通过
要是返回了false,对不起,原地返回
瞧,还挺给面子的,毕竟没洗劫一空
2.TabNav
标签切换 visibilitychange
小样,你以为攀上浏览器这颗大树,我就治不了你了
瞧我最新的科研成果—visibilitychange, 让你无所遁形
visibilityChangeHandler() {
const visibility = document.visibilityState;
if (visibility === 'hidden') {
this.focusable = false;
} else if (visibility === 'visible') {
setTimeout(() => {
this.focusable = true;
}, 50);
}
}
mounted() {
document.addEventListener('visibilitychange', this.visibilityChangeHandler);
},
beforeDestroy() {
document.removeEventListener('visibilitychange', this.visibilityChangeHandler);
}
技巧解析
❝浏览器页签关闭也是可以监听到的
❞
visibilitychange表示监听事件,
document.visibilityState表示页签状态,visible打开,hidden关闭
visibilitychange事件 传送门
❝这里的事件也能监听吗?
❞
是的,可以的,beforeunload
beforeunload事件 传送门
3.小工具
首字母大写
/*
* @{desc} 首字母大写
* @{params} str:String
* @{example}
firstUpperCase('home') =>Home
*/
const firstUpperCase = str => {
return str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase());
};
nextTick嵌套
// Tab组件中调用子组件Nav的方法
currentName(value) {
if (this.$refs.nav) {
this.$nextTick(() => {
this.$refs.nav.$nextTick(_ => {
this.$refs.nav.scrollToActiveTab();
});
});
}
}
「我们即使发了一千次短信」
「心与心之间大概也只能靠近1厘米」
参考链接
往期回顾
- 跟随Element学习Vue小技巧(1)——Layout
- 跟随Element学习Vue小技巧(2)——Container
- 跟随Element学习Vue小技巧(7)——Button
- 跟随Element学习Vue小技巧(8)——Link
- 跟随Element学习Vue小技巧(9)——Radio
- 跟随Element学习Vue小技巧(10)——Checkbox
- 跟随Element学习Vue小技巧(11)——Input
- 跟随Element学习Vue小技巧(12)——InputNumber
- 跟随Element学习Vue小技巧(13)——Select
- 跟随Element学习Vue小技巧(14)——Cascader
- 跟随Element学习Vue小技巧(15)——Switch
- 跟随Element学习Vue小技巧(16)——Slider
- 跟随Element学习Vue小技巧(17)——TimePicker
- 跟随Element学习Vue小技巧(18)——DatePicker
- 跟随Element学习Vue小技巧(20)——Upload
- 跟随Element学习Vue小技巧(21)——Rate
- 跟随Element学习Vue小技巧(23)——Transfer
- 跟随Element学习Vue小技巧(24)——Form
- 跟随Element学习Vue小技巧(25)——Table
- 跟随Element学习Vue小技巧(26)——Tag
- 跟随Element学习Vue小技巧(27)——Progress
- 跟随Element学习Vue小技巧(28)——Tree
- 跟随Element学习Vue小技巧(29)——Pagination
- 跟随Element学习Vue小技巧(31)——Avatar
- 跟随Element学习Vue小技巧(33)——Loading
- 跟随Element学习Vue小技巧(34)——Message
- 跟随Element学习Vue小技巧(36)——Notification
- 跟随Element学习Vue小技巧(37)——Menu