Vue04_事件绑定_methods

v-on:事件名="表达式"

methods: 定义回调函数 




    
    Title


    

Vue04_事件绑定_methods_第1张图片

click button

Vue04_事件绑定_methods_第2张图片

 

简写  v-on:  替换为@

例:v-on:click 简写为 @click




    
    Title


    

Vue04_事件绑定_methods_第3张图片

click the button

Vue04_事件绑定_methods_第4张图片

 

回调函数被调用时会传一个参数 => 当前发生的事件 event 




    
    Title


    

Vue04_事件绑定_methods_第5张图片

 click the button

Vue04_事件绑定_methods_第6张图片

 

如果回调函数需要传参数,那么将无法获取事件对象 event

此时需要 $enent 占位符,event 对象将被传到 $event 所占的位置

例:

事件对象将被传到第一个形参的位置




    
    Title


    

 Vue04_事件绑定_methods_第7张图片

 

Vue04_事件绑定_methods_第8张图片 

 

回调函数中的this 是当前的vue对象




    
    Title


    

Vue04_事件绑定_methods_第9张图片

 click the button

Vue04_事件绑定_methods_第10张图片

 

Vue04_事件绑定_methods_第11张图片

 

methods 中的方法可以用vue对象直接访问

Vue04_事件绑定_methods_第12张图片

 

methods 中的方法可以用vue对象直接访问

如何实现




    
    Title


//定义一个类
class Vue {
    //定义构造函数
    constructor(option){
        //获取所有的属性名
        let propertys = Object.keys(option.data);
        //添加代理属性
        propertys.forEach(
            /* ()=> {} 形式为箭头函数 其内没有this ,会从上一级作用域寻找 this 变量
             function(){} 中的this 为调用该方法的对象,此处箭头函数中的this 从上一级作用域找到的 this 是 constructor 创建的对象
               */
             (propertyName,index) => {
                 //不以$ _ 开始的属性名 做数据代理
                 let firstChar = propertyName.charAt(0);
                 if( firstChar != '_' && firstChar !='$' ){
                     Object.defineProperty(this,propertyName, {
                         get() {
                             return option.data[propertyName];
                         },
                         set(val) {
                             option.data[propertyName] = val;
                         }
                     });
                 }
            }
        );

        //获取 methods 中的所有方法名
        let methodsNames = Object.keys(option.methods);
        methodsNames.forEach(
            (methodName,index) =>
            {
                //为 当前 vue 对象 扩展一个方法
                this[methodName] = option.methods[methodName];
            }
        );

    }
}

Vue04_事件绑定_methods_第13张图片

 

 

你可能感兴趣的:(javascript,vue.js,前端)