vue次日

此次用vue作的是百度下拉菜单,知识总结
一、事件:事件都是经过v-on:绑定,简写就是@
二、属性:都是经过v-bind:绑定,除了style和class,简写就是用冒号 ,class和style有点不一样:说白了就是class里面能够扔数组也能够扔json
三、阻止冒泡: @click.stop="show()"
四、阻止默认行为:@contextmenu.prevent contextmenu也是一个事件:右击菜单
五、键盘事件
@keydown $event ev.keyCode
@keyup/keydown.left
@keyup/keydown.right
@keyup/keydown.up
@keyup/keydown.downphp

分别将get、post、jsonp三种方式简单雏形写下来参考:vue

get方式获取一个普通文本数据:json

this.$http.get('aa.txt').then(function(res){
            alert(res.data);
        },function(res){
            alert(res.status);
        });

get方式给服务发送数据:√数组

this.$http.get('get.php',{
            a:1,
            b:2
        }).then(function(res){
            alert(res.data);
        },function(res){
            alert(res.status);
        });

post方式:函数

this.$http.post('post.php',{
            a:1,
            b:20
        },{
            emulateJSON:true//须要加上这段数据才能把json数据加载上去
        }).then(function(res){
            alert(res.data);
        },function(res){
            alert(res.status);
        });

jsonp方式:vue-resource

this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',{
            wd:'a'
        },{
            jsonp:'cb'    //callback名字,默认名字就是"callback"
        }).then(function(res){
            alert(res.data.s);
        },function(res){
            alert(res.status);
        });

如图:post

clipboard.png

分析:jsonp

原理:this

经过input里面的tvalue值传到jsonp里面查数据,查完数据经过回调函数存在mydata里面,mydata经过循环遍历显示在页面上
https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&cb=jshow

一、此次用的是百度的js文件连接 若是jsonp传的不是callback就还须要声明一下,如:jsonp:"cb"
在输入框中输入数据经过get方法获取文件找到要查询的数据以下,this.tvalue就是输入框中的数据,取到数据成功返回第一个function,并将数据存在数组中。spa

this.$http.jsonp("https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",
                   {
                       wd:this.tvalue
                   },{
                       jsonp:"cb"
                   }).then(function (res) {
                        this.mydata=res.data.s;
               },function (res) {
                alert("取数据失败");
               })

二、经过键盘事件给当前li添加类让当前行高亮,这里面也是经过设定一个变量,让noIndex自增自减,添加orange类的条件是当前下标=当前变量

:class={orange:$index==noIndex}

三、让高亮行的数据显示在input里面

this.tvalue=this.mydata[this.noIndex];

写在new Vue里面的变量都须要在用的时候加this,写在结构的直接写变量

四、由于在点击上下键跳动的时候不用在获取数据,因此在get()中将上键38下键40(数字是所在键的e.keyCode的值)判断一下,若是是就return,点击enter-keyCode=13,让它直接搜索到当前内容,搜索百度的地址是这样的

https://www.baidu.com/s?wd=

if(ev.keyCode==38||ev.keyCode==40)return;
                if(ev.keyCode==13){
                    window.open('https://www.baidu.com/s?wd='+this.tvalue);
                    this.tvalue='';
                }

结构:

<div id="box">
    <input type="text" v-model="tvalue" @keyup="get($event)" @keydown.down="downs()" @keydown.up.prevent="ups()">
    <ul>
        <li v-for="item in mydata" :class={orange:$index==noIndex} >
            {{item}}
        </li>
    </ul>
    <p v-show="mydata.length==0">暂时无数据。。。</p>
</div>

凡是用到交互,都得引入<script src="js/vue-resource.js"></script>

**该写vue中vm了**

<script>

window.onload=function () {
    var vm=new Vue({
        el:'#box',
        data:{
            mydata:[],
            tvalue:'',
            noIndex:'-1'
        },
        methods:{
            get:function (ev) {
                if(ev.keyCode==38||ev.keyCode==40)return;
                if(ev.keyCode==13){
                    window.open('https://www.baidu.com/s?wd='+this.tvalue);
                    this.tvalue='';
                }
               this.$http.jsonp("https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",
                   {
                       wd:this.tvalue
                   },{
                       jsonp:"cb"
                   }).then(function (res) {
                        this.mydata=res.data.s;
               },function (res) {
                alert("取数据失败");
               })
            },
            downs:function () {
                this.noIndex++;
                if(this.noIndex==this.mydata.length){this.noIndex=-0}
                this.tvalue=this.mydata[this.noIndex];
            },
            ups:function () {
                this.noIndex--;
                if(this.noIndex==-1){this.noIndex=this.mydata.length-1}
                this.tvalue=this.mydata[this.noIndex];
            }
        }
    })
}

</script>

相关文章
相关标签/搜索