5.3自定义指令

一、自定义指令


        1.为何需要自定义指令
            内置指令不满足要求
        2.自定义指令的语法规则(获取元素焦点)
        Vue.directive('focus',{
            inserted: function(el){
                //el 表示指令所绑定的元素
                el.focus();
            }
        })
        
        3.自定义指令用法
        <input type="text" v-focus  />

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<input type="text" />
			<input type="text" v-focus  />
		</div>
	</body>
	
	<script type="text/javascript" src="../js/vue.js"></script>
	<script type="text/javascript" >
	
	/*
	自定义指令
		1.为何需要自定义指令
			内置指令不满足要求
		2.自定义指令的语法规则(获取元素焦点)
		Vue.directive('focus',{
			inserted: function(el){
				//el 表示指令所绑定的元素
				el.focus();
			}
		})
		
		3.自定义指令用法
		<input type="text" v-focus  />
	 */
	//注册一个自定义指令
	Vue.directive('focus',{
		inserted: function(el){
			//el 表示指令所绑定的元素
			el.focus();
		}
	})
		var vm = new Vue({
			el:'#app',
			data:{
				 msg: "hello",
			},
			methods: {
				handle: function (event) {
					
				}
			}
		});
	</script>
</html>

3.带参数的自定义指令(改变元素背景颜色)
    Vue.directive('color',{
        bind: function(el, binding){
            // 根据指令的参数设置背景色
            //console.log(binding.value)
            el.style.backgroundColor = binding.value.color
        }
    })
    
    4.指令的用法
    <input type="text" v-color='{color: "orange"}' />

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<input type="text" v-color='{color: "orange"}' />
		</div>
	</body>
	
	<script type="text/javascript" src="../js/vue.js"></script>
	<script type="text/javascript" >
	
	/*
	3.带参数的自定义指令(改变元素背景颜色)
	Vue.directive('color',{
		bind: function(el, binding){
			// 根据指令的参数设置背景色
			//console.log(binding.value)
			el.style.backgroundColor = binding.value.color
		}
	})
	
	4.指令的用法
	<input type="text" v-color='{color: "orange"}' />
	 */
	Vue.directive('color',{
		bind: function(el, binding){
			// 根据指令的参数设置背景色
			//console.log(binding.value)
			el.style.backgroundColor = binding.value.color
		}
	})
		var vm = new Vue({
			el:'#app',
			data:{
				 msg: {
					 color: 'green'
				 },
			},
			methods: {
				handle: function (event) {
					
				}
			}
		});
	</script>
</html>

//局部指令
        directives: {
            color: {
                bind: function(el, binding){
                    el.style.backgroundColor = binding.value.color
                }
            },
            focus: {
                inserted: function(el){
                    el.focus();
                }
            }
        }

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<input type="text" v-color = 'msg' />
			<input type="text" v-focus/>
		</div>
	</body>
	
	<script type="text/javascript" src="../js/vue.js"></script>
	<script type="text/javascript" >
	
	/*
	自定义指令-局部指令
	//局部指令
	directives: {
		color: {
			bind: function(el, binding){
				el.style.backgroundColor = binding.value.color
			}
		},
		focus: {
			inserted: function(el){
				el.focus();
			}
		}
	}
	使用方式
	<input type="text" v-color = 'msg' />
	<input type="text" v-focus/>
	 */
		var vm = new Vue({
			el:'#app',
			data:{
				 msg: {
					 color: 'red'
				 },
			},
			methods: {
				
			},
			//局部指令
			directives: {
				color: {
					bind: function(el, binding){
						el.style.backgroundColor = binding.value.color
					}
				},
				focus: {
					inserted: function(el){
						el.focus();
					}
				}
			}
		});
	</script>
</html>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值