一、过滤器
1-1 私有过滤器
<script>// 创建 Vue 实例,得到 ViewModelvar vm = new Vue({el: '#app',data: {msg: '曾经,我也是一个单纯的少年,单纯的我,傻傻的问,谁是世界上最单纯的男人'},methods: {},filters: {// 过滤器的三个参数:1.要过滤的文本 2.过滤的内容 3.替换的内容// 过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致了,这时候优先调用私有过滤器msgFormat: function (msg, arg, arg2) {// 字符串的 replace 方法,第一个参数,除了可写一个 字符串之外,还可以定义一个正则return msg.replace(/少年/g, arg + arg2)}},});</script>
使用:
<p>{{ msg | msgFormat('疯狂+1', '123') | test }}</p>
1-2 全局过滤器
// 定义一个 Vue 全局的过滤器,名字叫做 msgFormatVue.filter('msgFormat', function (msg, arg, arg2) {// 字符串的 replace 方法,第一个参数,除了可写一个 字符串之外,还可以定义一个正则return msg.replace(/单纯/g, arg + arg2)})
示例:
//main.jsVue.filter("format",function(val){if(val.length>6){val = val.slice(0,6)+"..."}return val})
<div id="app">{{msg|format(2)}}</div><script>var vm=new Vue({el:"#app",data:{msg:99.5484951},filters:{// val就是msg params就是管道修饰符后面函数传递过来的参数。format(val,params){return "¥"+val.toFixed(params);}}})
1-3 常用的过滤器
//1.去除空格 type 1-所有空格 2-前后空格 3-前空格 4-后空格function trim(value, trim) {switch (trim) {case 1:return value.replace(/\s+/g, "");case 2:return value.replace(/(^\s*)|(\s*$)/g, "");case 3:return value.replace(/(^\s*)/g, "");case 4:return value.replace(/(\s*$)/g, "");default:return value;}}//2.任意格式日期处理//使用格式:// {{ '2018-09-14 01:05' | formaDate(yyyy-MM-dd hh:mm:ss) }}// {{ '2018-09-14 01:05' | formaDate(yyyy-MM-dd) }}// {{ '2018-09-14 01:05' | formaDate(MM/dd) }} 等function formaDate(value, fmt) {var date = new Date(value);var o = {"M+": date.getMonth() + 1, //月份"d+": date.getDate(), //日"h+": date.getHours(), //小时"m+": date.getMinutes(), //分"s+": date.getSeconds(), //秒"w+": date.getDay(), //星期"q+": Math.floor((date.getMonth() + 3) / 3), //季度"S": date.getMilliseconds() //毫秒};if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));for (var k in o) {if(k === 'w+') {if(o[k] === 0) {fmt = fmt.replace('w', '周日');}else if(o[k] === 1) {fmt = fmt.replace('w', '周一');}else if(o[k] === 2) {fmt = fmt.replace('w', '周二');}else if(o[k] === 3) {fmt = fmt.replace('w', '周三');}else if(o[k] === 4) {fmt = fmt.replace('w', '周四');}else if(o[k] === 5) {fmt = fmt.replace('w', '周五');}else if(o[k] === 6) {fmt = fmt.replace('w', '周六');}}else if (new RegExp("(" + k + ")").test(fmt)) {fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));}}return fmt;}//3.字母大小写切换/*type1:首字母大写2:首页母小写3:大小写转换4:全部大写5:全部小写* */function changeCase(str, type) {function ToggleCase(str) {var itemText = ""str.split("").forEach(function (item) {if (/^([a-z]+)/.test(item)) {itemText += item.toUpperCase();} else if (/^([A-Z]+)/.test(item)) {itemText += item.toLowerCase();} else {itemText += item;}});return itemText;}switch (type) {case 1:return str.replace(/\b\w+\b/g, function (word) {return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();});case 2:return str.replace(/\b\w+\b/g, function (word) {return word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase();});case 3:return ToggleCase(str);case 4:return str.toUpperCase();case 5:return str.toLowerCase();default:return str;}}//4.字符串循环复制,count->次数function repeatStr(str, count) {var text = '';for (var i = 0; i < count; i++) {text += str;}return text;}//5.字符串替换function replaceAll(str, AFindText, ARepText) {raRegExp = new RegExp(AFindText, "g");return str.replace(raRegExp, ARepText);}//字符替换*,隐藏手机号或者身份证号等//replaceStr(字符串,字符格式, 替换方式,替换的字符(默认*))//ecDo.replaceStr('18819322663',[3,5,3],0)//result:188*****663//ecDo.replaceStr('asdasdasdaa',[3,5,3],1)//result:***asdas***//ecDo.replaceStr('1asd88465asdwqe3',[5],0)//result:*****8465asdwqe3//ecDo.replaceStr('1asd88465asdwqe3',[5],1,'+')//result:"1asd88465as+++++"function replaceStr(str, regArr, type, ARepText) {var regtext = '',Reg = null,replaceText = ARepText || '*';//repeatStr是在上面定义过的(字符串循环复制),大家注意哦if (regArr.length === 3 && type === 0) {regtext = '(\\w{' + regArr[0] + '})\\w{' + regArr[1] + '}(\\w{' + regArr[2] + '})'Reg = new RegExp(regtext);var replaceCount = this.repeatStr(replaceText, regArr[1]);return str.replace(Reg, '$1' + replaceCount + '$2')}else if (regArr.length === 3 && type === 1) {regtext = '\\w{' + regArr[0] + '}(\\w{' + regArr[1] + '})\\w{' + regArr[2] + '}'Reg = new RegExp(regtext);var replaceCount1 = this.repeatStr(replaceText, regArr[0]);var replaceCount2 = this.repeatStr(replaceText, regArr[2]);return str.replace(Reg, replaceCount1 + '$1' + replaceCount2)}else if (regArr.length === 1 && type === 0) {regtext = '(^\\w{' + regArr[0] + '})'Reg = new RegExp(regtext);var replaceCount = this.repeatStr(replaceText, regArr[0]);return str.replace(Reg, replaceCount)}else if (regArr.length === 1 && type === 1) {regtext = '(\\w{' + regArr[0] + '}$)'Reg = new RegExp(regtext);var replaceCount = this.repeatStr(replaceText, regArr[0]);return str.replace(Reg, replaceCount)}}//6.格式化处理字符串//ecDo.formatText('1234asda567asd890')//result:"12,34a,sda,567,asd,890"//ecDo.formatText('1234asda567asd890',4,' ')//result:"1 234a sda5 67as d890"//ecDo.formatText('1234asda567asd890',4,'-')//result:"1-234a-sda5-67as-d890"function formatText(str, size, delimiter) {var _size = size || 3, _delimiter = delimiter || ',';var regText = '\\B(?=(\\w{' + _size + '})+(?!\\w))';var reg = new RegExp(regText, 'g');return str.replace(reg, _delimiter);}//7.现金额大写转换函数//ecDo.upDigit(168752632)//result:"人民币壹亿陆仟捌佰柒拾伍万贰仟陆佰叁拾贰元整"//ecDo.upDigit(1682)//result:"人民币壹仟陆佰捌拾贰元整"//ecDo.upDigit(-1693)//result:"欠人民币壹仟陆佰玖拾叁元整"function upDigit(n) {var fraction = ['角', '分', '厘'];var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];var unit = [['元', '万', '亿'],['', '拾', '佰', '仟']];var head = n < 0 ? '欠人民币' : '人民币';n = Math.abs(n);var s = '';for (var i = 0; i < fraction.length; i++) {s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');}s = s || '整';n = Math.floor(n);for (var i = 0; i < unit[0].length && n > 0; i++) {var p = '';for (var j = 0; j < unit[1].length && n > 0; j++) {p = digit[n % 10] + unit[1][j] + p;n = Math.floor(n / 10);}s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;//s = p + unit[0][i] + s;}return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');}//8.保留2位小数function toDecimal2(x){var f = parseFloat(x);if (isNaN(f)) {return false;}var f = Math.round(x * 100) / 100;var s = f.toString();var rs = s.indexOf('.');if (rs < 0) {rs = s.length;s += '.';}while (s.length <= rs + 2) {s += '0';}return s;}export{trim,changeCase,repeatStr,replaceAll,replaceStr,checkPwd,formatText,upDigit,toDecimal2,formaDate}
二、插槽
插槽使用场景是:子组件需要显示的内容并非来自本身而是父组件动态传递进来的,插槽的内容具体是什么是由父视图在调用的时候决定的
//组件<slot name="header"></slot>//index.vue<bs-btn><p slot="header">hello world</p></bs-btn>
三、在组件中使用全局常量
第一步,在 src 下新建 const 文件夹下 新建 const.js,并在const.js中设置常量
.├── src│ ├── const│ │ ├── const.js│ ││ └── main.js└── ...//const.jsexport default {install(Vue,options){Vue.prototype.global = {title:'全局',isBack: true,isAdd: false,};}}
第二步,在 main.js 下全局引入:
//引入全局常量import constant from './const/const.js'Vue.use(constant);
第三步,即可在 .vue 组件中使用:
//通过js方式使用:this.global.title//或在 html 结构中使用{{global.title}}
