结束
意味着新的开始
1 组件要素
props
技巧总结
1.Function类型,构建 format
2.Object类型,构建 VNode
3.集体绑定,v-bind,多用于属性和事件中转$listeners-$attrs
event
技巧总结
1.事件传参,argument
2.事件传递,dispatch
3.双向绑定,update:xxx
slot
技巧总结
1.插槽语法糖,#default
2.插槽JSX,JSX-slot
3.函数式组件,Scoped Slots
2 组件复用
mixin
技巧总结
directive
技巧总结
1.属性传参,参数不止value,arg,modifier还可以是attrs
2.动态插入组件,在DOM元素里挂载另一个组件
filter
技巧总结
1.全局过滤器,处理空值,字符转换
JSX
技巧总结
extend
技巧总结
1.增强组件,扩展组件属性和方法
plugin
技巧总结
1.批量构建组件,开发插件
3 组件边界
组件查找
技巧总结
1.
$root
, 查找根组件,可构建$bus
2.provide-inject,查找祖先,后代
3.$parent-$children
,查找父子组件
4.$refs
,查找指定组件
5.__vue__
,查找el挂载组件
组件缓存
技巧总结
1.keep-alive
2.v-show,显示隐藏
组件刷新
技巧总结
1.绑定key值
2.v-if,销毁重建
3.$forceUpdate
, 强制刷新
组件语法糖
技巧总结
1.v-bind=“obj”, 属性集体绑定
2.#file=“fileInfo”, 作用域插槽简化
3.v-model, :value @input简化
4..sync.v, :v @update:v简化
5.this.$once('hook:beforeDestroy', fn) 事件侦听器
4 工具箱
autoprefixer
/*
* @{desc} 添加前缀
* @{params} style 样式
*/
export const autoprefixer = function(style) {
if (typeof style !== 'object') return style;
const rules = ['transform', 'transition', 'animation'];
const prefixes = ['ms-', 'webkit-'];
rules.forEach(rule => {
const value = style[rule];
if (rule && value) {
prefixes.forEach(prefix => {
style[prefix + rule] = value;
});
}
});
return style;
};
firstUpperCase
/*
* @{desc} 首字母大写
* @{params} str:String
* @{example}
firstUpperCase('home') =>Home
*/
const firstUpperCase = str => {
return str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase());
};
kebabCase
/*
* @{desc} 首字母大写
* @{params} str:String
* @{example}
kebabCase('BaseNav') =>base-nav
*/
export const kebabCase = function(str) {
const hyphenateRE = /([^-])([A-Z])/g;
return str
.replace(hyphenateRE, '$1-$2')
.replace(hyphenateRE, '$1-$2')
.toLowerCase();
};
navigator
export const isIE = function() {
return !Vue.prototype.$isServer && !isNaN(Number(document.documentMode));
};
export const isEdge = function() {
return !Vue.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1;
};
export const isFirefox = function() {
return !Vue.prototype.$isServer && !!window.navigator.userAgent.match(/firefox/i);
};
mixColor
/*
* @{desc} 颜色加深或减淡
* @{params}
color:String #fff | #ffffff
percent:Number 0.2 | -0.2
* @{example}
// 加深
mixColor('#fff', 0.2)
=>rgb(255 * 0.8, 204, 204)
*/
mixColor(color, percent) {
let { red, green, blue } = this.getColorChannels(color);
if (percent > 0) { // shade given color
red *= 1 - percent;
green *= 1 - percent;
blue *= 1 - percent;
} else { // tint given color
red += (255 - red) * percent;
green += (255 - green) * percent;
blue += (255 - blue) * percent;
}
return `rgb(${ Math.round(red) }, ${ Math.round(green) }, ${ Math.round(blue) })`;
}
在Ta没来之前 你本来就是一个人
参考链接
往期回顾
- 跟随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
- 跟随Element学习Vue小技巧(38)——Tabs
- 跟随Element学习Vue小技巧(39)——Breadcrumb
- 跟随Element学习Vue小技巧(41)——Dropdown
- 跟随Element学习Vue小技巧(42)——Steps
- 跟随Element学习Vue小技巧(43)——Dialog
- 跟随Element学习Vue小技巧(44)——Tooltip
- 跟随Element学习Vue小技巧(45)——Popover
- 跟随Element学习Vue小技巧(48)——Carousel
- 跟随Element学习Vue小技巧(49)——Collapse
- 跟随Element学习Vue小技巧(50)——Timeline
- 跟随Element学习Vue小技巧(52)——Calendar
- 跟随Element学习Vue小技巧(54)——Image
- 跟随Element学习Vue小技巧(55)——Backtop
- 跟随Element学习Vue小技巧(56)——InfiniteScroll
- 跟随Element学习Vue小技巧(57)——Drawer