Vue基础以内部指令(下)

v-on绑定事件监听器

直接撸代码:javascript

<div id="app">
  <h2>计数器</h2>
  number:{{number}}
  <button v-on:click="add">+</button>
  <button @click="subtract">-</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
    var app = new Vue({
        el: '#app', // app是Vue实例的挂在对象
        data: {
          number: 0
        },
        methods: {
          add () {
            this.number ++
          },
          subtract () {
            this.number --
          }
        }
    })
</script>

@click等同于v-on:click,是Vue的语法糖,在methods内定义好方法,v-on指令监听DOM事件来触发一些javascript代码。vue

除了绑定click以外,咱们还能够绑定其它事件,好比键盘回车事件v-on:keyup.enter,更多事件请点击查看java

面试考点:Vue事件修饰符的做用
<div id="app">
  <div @click="grandfather">
    <div @click="father">
      <div @click="son">me</div>
    </div>
  </div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
    var app = new Vue({
        el: '#app', // app是Vue实例的挂在对象
        data: {
        },
        methods: {
          grandfather () {
            console.log('grandfather')
          },
          father () {
            console.log('father')
          },
          son () {
            console.log('son')
          },
        }
    })
</script>

事件流图(来自百度):面试

image

上面一段代码,什么修饰符都不添加时,点击“me”,依次打印son、father、grandfathernpm

  • .stop

阻止冒泡,操做子元素不会触发父元素同类事件app

<div @click.stop="grandfather">
  <div @click.stop="father">
    <div @click.stop="son">me</div>
  </div>
</div>

此时,只会触发子元素事件this

  • .capture

添加事件侦查时使用事件捕获模式,从外到内依次捕获spa

<div @click.capture="grandfather">
  <div @click.capture="father">
    <div @click.capture="son">me</div>
  </div>
</div>

依次打印grandfather、father、son.net

  • .prevent

取消默认事件code

<a href="www.baidu.com" @click.prevent="">百度</a>

连接不跳转

  • .self

只在添加事件的元素自身触发

  • .once

事件只触发一次

其余指令

v-pre(不须要表达式)

在模板中跳过vue的编译,直接输出原始值。就是在标签中加入v-pre就不会输出vue中的data值了

<div id="app" v-pre>
    <h1>{{message}}</h1>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
    var app = new Vue({
        el: '#app', // app是Vue实例的挂在对象
        data: {
          message: 'Hello world'
        }
    })
</script>

v-cloak(不须要表达式)

为了解决当网速较慢时,Vue.js文件没有被加载完时页面上数据绑定的闪现问题。
例如:

<h1>{{message}}</h1>

会闪现{{message}}

利用v-cloak指令使页面在Vue渲染完指定的整个DOM后才进行显示,而且v-cloak会在Vue实例结束编译后从绑定的DOM上移除,结合CSS能够解决这个问题。

[v-cloak] {
  display: none;
}

v-once(不须要表达式)

这个指令在实际开发中用的不是不少,做用是使定义它的元素或组件只渲染一次,包括元素或组件的全部子节点。渲染一次后不会随数据变化,能够视为静态。

<div id="app" v-once>
    <input type="text" v-model="message">
    <h1>{{message}}</h1>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
    var app = new Vue({
        el: '#app', // app是Vue实例的挂在对象
        data: {
            message: "Hello world" // 字面量
        }
    })
</script>

v-once1.png

以上是本期所有内容,欲知后事如何,请听下回分解<( ̄︶ ̄)↗[GO!]

相关文章
相关标签/搜索