vue(2)

今天准备写一篇文章,来记录下自己学习vue的轨迹,今天准备写的是Vue几个常用的指令。想必大家都用过一些搜索网站,比如百度或者360,当用户输入关键词之后,下方会出现一些备选项,然后通过键盘的up和down就可以选择,今天我用vue实现了一下。望各位大神不吝赐教。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
    <script src="vue-resource.js"></script>
    <style>
        .gray{
            background: #ccc;
        }
    </style>
</head>
<body>
    <div class="box">
        <input type="text" @keyup="get($event)" v-model="t1" @keydown.down="changeDown()" @keydown.up.prevent="changeUp()"/>
        <ul>
            <li v-for="value in myData" :class="{gray:now == $index}">
                {{value}}
            </li>
        </ul>
        <p v-show="myData.length == 0">暂无数据</p>
    </div>
</body>
<script>
    window.onload = function () {
        new Vue({
            el:'.box',
            data:{
                t1:'',
                myData:[],
                now:-1
            },
            methods:{
                get:function (eve) {
                    if (eve.keyCode == 38 || eve.keyCode == 40) return;
                    if(eve.keyCode == 13) {
                        window.open('https://www.baidu.com/s?wd='+this.t1);
                    }
                    this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',{
                        wd : this.t1
                    },{
                        jsonp:'cb'
                    }).then(function (res) {
                        this.myData = res.data.s;
                    },function () {


                    })
                },
                changeDown:function () {
                   this.now++;
                   if(this.now == this.myData.length) this.now = -1;
                   this.t1 = this.myData[this.now];
                },
                changeUp : function () {
                    this.now--;
                    if (this.now == -2) this.now = this.myData.length - 1;
                    this.t1 = this.myData[this.now];
                }
            }
        })
    }
</script>
</html>

首先获取到输入的关键词t1,然后将关键词作为参数,通过vue-resource的http请求到相应的数据,然后将数据塞进myData中,然后通过v-for指令,将数据展示出来。

这里面有几个坑,第一个,当按下up键的时候,光标会跑到input框的最前面,这时候需要禁止默认行为,禁止默认行为有两种方式,第一种就是传入一个$event,然后通过preventDefault()函数禁止默认行为,第二种就是vue大神的方法,在函数后面加上.prevent,我自己是比较倾向第二种写法的,既然选择了vue,就要融入vue的环境。第二个问题就是,当按了up或者down之后,带选项的内容也会发生变化,这是为什么呢?因为我们松开这些键的时候,触发了get()函数,所以这个时候,我们就要判断我们是松开了哪个键盘,如果松开的是up或者down按键,那么get()函数什么就不做,不会重新发起请求。如果松开的是enter键,那么就把关键词作为参数,发起请求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值