复习vue(4)过滤器自/定义指令

135 阅读1分钟

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」。

过滤器

过滤器是什么?

过滤器: 用于处理数据,但是并不会改变原本数据的一种处理方式

创建过滤器:
  • 全局过滤器: Vue.filter(过滤器名字,函数)

Vue.filter('toDollar',val => '$' + val)
  • 局部过滤器:
let obj = {
    el:'#app',
    filter:{
        toFixed (val,num = 2){
            return val.tofixed(num)
        },
        toRMB(val){
            return '¥' + val
        }
    }
}
let vm = new Vue(obj);

使用过滤器

{{1.22222 | toFixed | toRMB}} <br>
{{1.22222 | toFixed(3)}} <br>
{{1.22222 | toFixed | toRMB}} <br>
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>
<div id="app">
	{{1.22222 | toFixed | toRMB}} <br>
	{{1.22222 | toFixed(3)}} <br>
	{{1.22222 | toFixed | toRMB}} <br>
	<!-- | 称为管道符,管道符会把其前面的值传给过滤器函数的第一个参数-->
	<!--过滤器可以连续使用,后面过滤器的第一个参数是前面过滤器处理后的结果 -->
</div>

<script src="vue.js"></script>
<script>
	// 过滤器:用于处理数据,但是并不会改变原来的数据的一种处理方式;

	// 注册全局过滤器:这种过滤器在任何地方都能用
	// Vue.filter(过滤器名字, 函数)
	Vue.filter('toDollar', val => '$' + val);

	// 局部过滤器:只能在当前组件可以使用

	let vm = new Vue({
		el: '#app',
		filters: {
			toFixed (val, num = 2) {
				// 返回一个保留 num 位的数字
				return val.toFixed(num);
			},
			toRMB(val) {
				return '¥' + val;
			}
		}
	})
</script>
</body>
</html>

自定义指令

自定义指令可以给元素增加一些特殊的功能;以拖拽为例

代码实例:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<style>
		#app div {
			position: absolute;
			width: 100px;
			height: 100px;
			background: red;
			-webkit-user-select: none;
		}
		#app div:nth-child(2) {
			top: 200px
		}
	</style>
</head>
<body>
<div id="app">
	<div v-drag>1</div>
	<div v-drag>2</div>
</div>

<script src="vue.js"></script>
<script>
	let vm = new Vue({
		el: '#app',
		directives: {
			// 对象中存储的自定义指令
			drag: {
				inserted(el) {
					// 这个函数定义了指令的具体行为 第一个参数是使用这个元素的元素
					el.onmousedown = function (e) {
						this.startX = e.pageX - this.offsetLeft;
						this.startY = e.pageY - this.offsetTop;
						document.onmousemove = function (e) {
							el.style.left = e.pageX - el.startX + 'px';
							el.style.top = e.pageY - el.startY + 'px';
						};
						document.onmouseup = function () {
							document.onmousemove = document.onmouseup = null;
						}
					}
				}
			}
		}
	})
</script>
</body>
</html>