Vue入门指南(3)

属性绑定

v-bind:给属性绑定对应的值

<div id="vue-app">
  <a v-bind:href="website">web开发</a>
</div>

<script src="vue.js"></script>
<script>
  var app = new Vue({
    el: "#vue-app",
    data: {
      website: "http://www.baidu.com"
    },
  })
</script>

TIM图片20180124220600.jpg
这时候a的href属性值就是我们希望的值。
如果想将标签绑定,可以采用下面的方法:

<div id="vue-app">
  <p v-html="websiteTag"></p>
</div>

<script src="vue.js"></script>
<script>
  var app = new Vue({
    el: "#vue-app",
    data: {
      websiteTag: "<a href='http://www.baidu.com'>Web</a>"
    }
  })
</script>

TIM图片20180125002300.png
这个方法其实是给p标签添加了一个html内容,而这个html则是一个带有href属性的a标签,此时就达到了绑定标签的效果。

事件绑定

v-on:js中的事件在这里依然适用

<style>
  #canvas{
    width: 300px;
    height: 300px;
    border: 1px solid red;
    text-align: center;
    line-height: 300px;
  }
</style>

<h1>Event</h1>
<div id="vue-app">
  <button type="button" v-on:click="add(1)">增一岁</button>
  <button type="button" v-on:click="subtract(1)">减一岁</button>
  <button type="button" v-on:click="add(10)">增十岁</button>
  <button type="button" v-on:click="subtract(10)">减十岁</button>
  <p>My age is {{ age }}</p>
  <div id="canvas" v-on:mousemove="moveXY">{{x}},{{y}}</div>
</div>

<script src="vue.js"></script>
<script>
  var app = new Vue({
    el: "#vue-app",
    data: {
      age: 20,
      x: 0,
      y: 0,
     },
     methods: {
      add: function(num){
        return this.age += num;
      },
      subtract: function(num){
        return this.age -= num;
      },
      moveXY: function(event){
        this.x = event.offsetX;
        this.y = event.offsetY;
      }
    }
})
</script>

在这里,我们封装了三个方法,其中一个是加age,还有一个是减age,我们在点击按钮时分别调用这两个方法,并且传递对应的参数,就可以实现用两个方法完成四个按钮的功能。还有一个方法是鼠标移动时显示对应的偏移值。
讲到调用方法,我们顺便说一句:1. 不论需不需要传参数,在{{ }}里调用方法必须写成{ { add() }}的形式。2. 在v-on里,如果不需要传参数,我们可以写成v-on:click=”add”,如果需要传参数就要写成v-on:click=”add(参数)”。

事件修饰符

修饰符是由点开头的指令后缀来表示的。比如,在刚才的例子中,如果我们需要仅仅在点击第一下按钮时年龄发生变化,我们就可以用到once修饰符

<button type="button" v-on:click.once="add(1)">增一岁</button>

还有,如果我们想让鼠标在特定区域内x,y不发生变化,可以用到stop修饰符

 <div id="canvas" v-on:mousemove="moveXY">
  {{x}},{{y}} - <span v-on:mousemove.stop="">Stop moving</span>
 </div>

此时,再把鼠标放在span标签内,xy的值就不会发生任何变化。
除了once和stop,这样的修饰符还有一些,我们来看看它们具体有什么功能:

<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>

<!-- 可以写成只有修饰符的形式 -->
<form v-on:submit.prevent></form>

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>

使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 @click.prevent.self 会阻止所有的点击,而 @click.self.prevent 只会阻止对元素自身的点击。

<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>

不像其它只能对原生的 DOM 事件起作用的修饰符,.once 修饰符还能被用到自定义的组件事件上。
Vue 还对应 addEventListener 中的 passive 选项提供了 .passive 修饰符。

<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成  -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>

这个 .passive 修饰符尤其能够提升移动端的性能。
不要把 .passive 和 .prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。

键盘事件
<div id="vue-app">
        <h1>键盘Event</h1>
        <label>姓名</label>
        <input type="text" v-on:keyup="logName"/>
</div>
<script src="vue.js"></script>
<script>
        var app = new Vue({
            el: "#vue-app",
            methods: {
                logName: function(){
                    console.log("你正在输入姓名!");
                }
            }
        })
</script>

TIM图片20180125105527.png
在这个键盘事件中,我们定义的方法是当你输入内容时,控制台会打印一句“你正在输入姓名!”。

键盘修饰符

就刚才的例子而言,会发现你按下多少次键盘,就会打印多少次话。但是这样不符合我们平时的习惯,我们更希望在按下enter键之后再打印这句话,此时就要用到键盘修饰符

<input type="text" v-on:keyup.enter="logName"/>

TIM图片20180125110458.png
现在的效果是不是就好多了。如果我们想要按下alt加enter才能打印,就在.enter后加一个.alt就好了。
记住所有的 keyCode 比较困难,所以 Vue 为最常用的按键提供了别名:

<!-- 只有在 `keyCode` 是 enter 时调用 `vm.submit()` -->
<input v-on:keyup.enter="submit">

<!-- 缩写语法 -->
<input @keyup.enter="submit">

全部的按键别名:
.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值