vue语法

Vue.js:用于构建用户界面的渐进式框架。

vue基础语法
1.导入Vue.js:

(1)绝对路径导入<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
(2)下载Vue.js相对路径导入 <script src="../js/vue.js"></script>

2.创建Vue实例:

var vue=new Vue({});

或 new Vue({});

3.vue数据绑定方式:双向数据绑定 (给实例化数据赋值会影响界面数据,修改界面值也会影响实例化值)

Eg: var data={

name:”张三”

};

var vm=new Vue({

data:data

});

修改data数据:

data.name=”李四”;

console.log(vm.name);//李四

vm.name=”王二”;

console.log(data.name);//王二

双向数据绑定原理原理

利用object.defineProperty()方法的set() get() 属性方法实现

var obj={name:””};

Object.defineProperty(obj,’name’,{

//对象 参数

set:function(value){

//为属性设置值

name=value;

}

get:function(){

//获取属性设置的值

console.log(name);

return name;

}

});

obj.name=”tom”;

console.log(obj.name);//tom

Object.freeze()阻止数据双向绑定 阻止修改现有属性的特性和值,并阻止添加新属性

返回值是传递给函数的对象。

4.使用vue的标志符进行数据区分 $

console.log(vm.$data===data);//true

区分vue实例里面的元素选择器 和js里面获取的元素是否一致

var vm=new Vue({

    el:"#app"   //el属性确认vue单页面程序的执行对象

});

console.log(vm.$el===document.getElementById(“app”));//true*/

watch:{属性:function(){}} 监听器 监听数据的变化 (只有数据有变化时有作用)
var em=new Vue({

el:”#app”,

data:{

name:”john”

},

watch:{

name:function(newvalue,oldvalue){

console.log(newvalue);

console.log(oldvalue);

}

}

});

6.生命周期钩子函数 created:function(){}

new Vue({

 el:”#app”,

created:function(){

  //在实例被创建后执行  也可以发送数据请求(ajax)

}

data:{

sex:”man”

},

watch:{

sex:function(){

console.log(this); //this=>sex

}

}

})

7.计算属性方法 computed:{属性:function(){}}

new Vue({

el: ”#app”,

data:{

msg:”123456”,

name:”lisi”

},

computed:{

//可以帮助快速进行逻辑运算,这个里面的方法不能被事件调用,只能用于{{}}中直接计算

msgData:function(){

   return  this.msg.split('').reverse().join('');

   //return  this.$data.msg;

},

showData:function(){

         console.log(this.msg);

  }

}

});

二、事件的绑定和调用

v-on 事件监听 eg:你好
methods:{名称:事件处理} 事件调用不回传参可以不加()

常用的事件修饰符 :

按键keyup修饰符:.enter .tab .delete (捕获“删除”和“退格”键) .esc

.space .up .down .left .right

还可以添加keycode值

2.事件的绑定方法还可以用@ eg:@click=”事件”

三、插值表达式及class style绑定

1.数据的绑定方式{{}} v-once指绑定一次性值,后期数据修改不会发生变化;

{{msg}}

2.v-html指定内容以html方式绑定 将绑定内容解析为html语句 只显示其内容

{{ele}}

3.v-bind 只能绑定特有的属性 缩写为 :属性 不能绑定事件

{{name}}

<button v-bind:id=“btnid” v-bind:disabled=“isclick” @click=“name=‘张三’”>change

<button :id=“btnid” :disabled=“isclick” @click=“name=‘张三’”>缩写change

动态修改id

4.v-on 绑定事件 同一事件不同绑定方式操作数据 数据是互通的

{{count}}

change

<button @click=“count++”>@change

5.{{}}中可以进行简单的表达式数据操作

{{a+b}}

{{istrue?"Y":"N"}}

{{str.split("").reverse().join("")}}

  1. .class style 绑定

    动态:v-bind:class=“类名” :class="[类名1,类名2,类名…]"

    静态: v-bind:class="{类名:布尔标志}" @事件=“布尔标志=取反”

<span :class="[classname,size]"></span> <!--绑定多个-->

<!--动态绑定-->

<span :class="{spancolor:showcolor}"></span>

<button @click=“showcolor=true”>变化

四、过滤器

Vue.filter(‘名称’,function(){})

在创建 Vue 实例之前全局定义过滤器

或在一个组件的选项中定义本地的过滤器

调用时{{参数|过滤器}}

全局定义:

Vue.filter(‘tolower’,function(value){

    return value.toLowerCase();

});

局部定义:

new Vue({

    el:"#app",

    data:{ data:”” },

    computed:{

     //利用条件过滤数据显示

     studentData:function(){

      var that=this;

      return this.stu.filter(function(value){  //对数组数据进行过滤 index value key

           if(value.sex===that.sex){

                  return value;

               }

            })

        }

    }

})

五、自定义指令

自定义指令 Vue.directive(‘指令名称’,{事件})

指令名称小写  使用时v-名称

全局指令注册 directive  局部directives

自定义指令可以指定钩子函数

Eg:

Vue.directive(‘ab’,{

    //当被绑定的元素插入到 DOM 中时执行 钩子函数

    inserted: function (el) {

        el.focus();

        console.log(el.value);

    },

    /*bind  钩子函数  在当前指令绑定到元素的时候执行一次*/

    bind:function(el){

        console.log(el.value);

    },

    /*update 钩子函数 是在数据更新的时候开始执行*/

    update:function(){

        console.log(1);

    }

});

六、组件

定义一个组件 Vue.component(‘组件名’,{组件执行的事件})

  • Prop 是你可以在组件上注册的一些自定义特性。当一个值传递给一个 prop 特性的时候,它就变成了那个组件实例的一个属性。 传值

  • prop 属性 驼峰命名 className class-name

  • 静态 class-name 动态 :class-name 获取data的变量值需要前面加:

  • template 创建模板

  • 局部注册 组件创建在实例化之前 无法传值?

  • */

Eg:

//全局注册

Vue.component('tab-1',{

    template:"<span>全局</span>"

});

//全局注册 动态传值

Vue.component('tab-2',{

    props:['DataName','stuInfo'],

    template:"<span>{{DataName}}{{stuInfo}}</span>"

});

//局部注册

var templates={

    template:"<span>局部注册</span>"

};

new Vue({

    el:"#tab",

    data:{

        msg:"大吉大利",

        info:"今晚吃鸡"

    },

    components:{

        "tab-3":templates

    },

    watch:{

        msg:function(newvalue,oldvalue){

            console.log(newvalue);

            console.log(oldvalue);

        }

    }

});

路由 --需要导入路由库 类似于a链接

1.入口点

(1)静态 入口

(2)路由名称动态传值

last

2.出口点

出口

3.注册路由 router:router

3.配置路由对象 const router=new VueRouter({})

Eg:

const router=new VueRouter({

    routes:[

            //映射文件  入口

         {

            path:"/page", //路径

            component:{  //组件

                template:"<div><span>page</span>" + //不加子页面使用

                "<router-link to='/page/pagechild/man'>child</router-link>" + //子页面传值

                "<router-view></router-view></div>"

            },

            //配置路由的子界面

            child:[

                {

                    path:"pagechild/:sex",

                    component:{

                           template:"<span>pagechild{{$route.params.sex}}</span>"

                    }

                }

              ]

        },

        {

            //调用路由传值

            path:"/last/:id", //路径

            name:'data',

            component:{

                template:"<div>{{$route.params.id}}</div>"

            }

        }

    ]

});

new Vue({

    el:"#app",

    router: router  //注册

})

八、流控制语句

/* v-if v-else-if v-else 类似于js分支语句 条件渲染*/

/v-show 根据条件隐藏显示元素/

字母为:{{show}}

字母为:{{show}}

字母为:{{show}}

字母为:no

<button @click=“isshow=true”>change

v-for指令根据一组数组的选项列表进行渲染 v-for=“item in items” 显示:{{item.属性}}

  • v-for添加给需要渲染的元素

  • 可添加index key: v-for="(item,index,key) in items"

  • v-for 通过一个对象的属性来迭代 v-for=“item in object”

Eg:

    • {{item.name}}
      • {{item.name+"-"+item.sex+"-"+item.age}}
        • <li v-for="(item,index) in stu">{{item.name}}:{{index}} {{item.sex}}:{{index}}</li>
          
        • <li v-for="(key,item,index) in student">{{index}}:{{item}}:{{key}}</li>
          

        new Vue({

            el:"#list",
        
            data:{
        
                items:[
        
                    {name:"tom"},
        
                    {name:"john"},
        
                    {name:"zhansan"}
        
                ],
        
                stu:[
        
                    {name:"tom",sex:"man",age:"12"},
        
                    {name:"john",sex:"woman",age:"13"},
        
                    {name:"zhansan",sex:"man",age:"32"}
        
                ],
        
                student:{name:"tom",sex:"man",age:"12"}
        
            }
        
        })
        

        九、ajax 请求

        *ajax 需引入vue-resource库

        *利用方法绑定

        • this.$http.post/get(‘url’,{data}).then(function(res){成功请求后操作})

        new Vue({

            el:"#app",
        
            methods:{
        
                ajaxmothed:function(){
        
                    this.$http.post('./yufa.html',{
        
                        name: "zhangsa"
        
                    }).then(function (res) {
        
                        console.log(res);
        
                    });
        
                }
        
            },
        
            computed:{
        
                ajaxvue:function(){
        
                    this.$http.post('./yufa.html',{
        
                        name: "zhangsa"
        
                    }).then(function (res) {
        
                        console.log(res);
        
                    });
        
                }
        
            }
        
        })
        

        作者:蕙惠子
        来源:优快云
        原文:https://blog.youkuaiyun.com/weixin_40976555/article/details/82778607

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值