Vue基础三

事件处理

<button v-on:click="handler">事件一</button>
<button @click="handler">事件二</button>
<button @click="eventHandler">获取原生事件对象</button>
<button @click="arguHandler(5,5)">事件参数</button>
<button @click="arguEventHandler( 5,$event )">事件参数里面有事件对象</button>

修饰符

事件修饰符
 <div class="big" @click.self="bigHandler">
    <div class="middle" @click.self="middleHandler">
        <div class="small" @click.self="smallHandler">
        </div>
    </div>
</div>

.stop
.prevent
.capture
.self
.once
.passive
//修饰符可以串联
v-on:click.stop.prevent
//Vue 还对应 addEventListener 中的 passive选项提供了 .passive 修饰符
键盘修饰符
<input type="text" @keyup.enter="getInputVal">
<input type="text" @keyup.13="getInputVal">

.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right
使用 keyCode 特性也是允许的:
<input v-on:keyup.13="submit">

自定义事件

  • 自定义事件 - node.js的events模块
  • 事件的发布 $on 发布【 声明一个事件 】
  • 事件的订阅 $emit 订阅【 触发一个事件 】
<!-- 自定义事件 -->
<button @click="myEvent"> 自定义事件 </button>

 methods: {
            myEvent() {
                vm.$emit('a1', 100)
            }
        }
        
        
vm.$on('a1', function(val) {
        console.log('a1' + val)
    })
        

一部分指令

  • v-pre
    • 跳过这个元素和它的子元素的编译过程。可以用来显示原始 Mustache 标签。跳过大量没有指令的节点会加快编译。
 <p v-pre>
    {{ info }}
 </p>
 
 new Vue({
        el: '#app',
        data: {
            info: '666666'
        }
    })
    
    输出:{{ info }}
    
  • v-cloak
    • 这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。
<style>
    [v-cloak] {
      display: none;
    }
  </style>
  
  
  new Vue({
    el: '#app',
    data: {
      info: 'Hello 骏哥'
    }
  })
  • v-once
    • 只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。
<div id="app">
    <input type="text" v-model = "num">
    <p v-once> {{ num }} </p>
  </div>
  
  
   new Vue({
    el: '#app',
    data: {
      num: 0
    }
  })

自定义指令

自定义指令有两种定义形式
1. 全局定义
2. 局部定义

 <div id="root">
        <!-- <input type="text" v-focus.stop = "info"> -->
        <input type="text" v-my-focus>
 </div>

一、全局定义

// Vue.directive( 指令名称, 指令的配置选项 )
// /*  v-focus  */
Vue.directive('focus', {
        /* 每一个选项中都有四个参数 */
        bind: function() { //当指令绑定到dom元素时触发
            console.log('bind')
        },
        inserted: function(el, b, c, d) { // 当指令绑定的dom元素插入页面时触发
            console.log("兵哥: el", el) //这个就是指令绑定的dom
            el.focus()
                // el.style.background = 'red'
            console.log("兵哥: b", b)
            if (b.modifiers.stop) {
                //true 
                el.style.background = 'green'
            } else {
                //false 
                el.style.background = 'red'
            }

            el.value = b.expression
            console.log("兵哥: c  -  vNode", c)
            console.log("兵哥: d  - oldVNode", d)
        }
    })

二、局部定义

    new Vue({
         el: '#app',
         data: {
             info: '焦点'
         },
         directives: {
             // 指令名称:选项
            'my-focus': {
                 inserted: function(el) {
                     el.focus()
                 }
             }
         }
     })

axios

前端模拟数据形式

<button @click = "getMockData"> Mock数据 </button>
<button @click = "getJsonPlaceHolder"> JsonPlaceholder </button>



methods: {
      getMockData () {
        // axios.get( url, 配置项 ).then().catch()
        axios.get('./mock/data/data.json')
          .then( res => {
            console.log( res )
          })
          .catch( err => console.log( err ))
      },
      getJsonPlaceHolder () {
        axios.get('http://jsonplaceholder.typicode.com/albums')
          .then( res => {
            console.log( res )
          })
          .catch( err => console.log( err ))
      }
     }

后端接口形式

<button @click = "register"> 后端接口 - 注册 </button>
<button @click = 'login'> 后端接口 - 登录 </button>
<button @click = "shop"> 后端接口 - shop </button>

method:{
 shop () {
        axios.get(`${ DEV_BACK_URL }/shop`,{
          params: { //get请求携带参数
            a: 1,
            b: 2
          }
        }).then( res => {
          console.log( res )
        }).catch( error => console.log( error ))
      },
      register () {
        // axios.post(url,config).then().catch()
        const p = new URLSearchParams() //得到参数携带对象
        // p.append( 参数,参数值 )
        p.append( 'username','张骏' )
        p.append( 'password','123' )
        p.append( 'name','骏哥' )
        axios({
          url: `${ DEV_BACK_URL }/register`,
          data: p,// post请求携带参数的配置项
          method: 'POST',
          withCredentials: true,
        }).then( res => console.log( res ))
          .catch( err => console.log( err ))
      },
      login () {
        axios.post(`${ DEV_BACK_URL }/login`,{
          username: '张三',
          password: '123'
        }).then( res => {
          console.log( res )
        }).catch( err => console.log( err ))
      }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值