一.Vue的基本语法

1.Vue是个渐进式框架,采用自底向上的增量开发,Vue关注图层.

2.使用Vue:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
//1.引入Vue的核心JS文件,Vue会被当做全局变量使用
<script type="text/javascript" src="js/vue.js" ></script>
//2.准备Dom结构
<div id="app">
 //4.获取数据
    {{msg}}      
</div>
//3.实例化组件
<script type="text/javascript">
        var app=new Vue({
              e1:"#app",
              data:{
                     msg:"hello vue"         
    }
});
</script>

二.指令

1.文本渲染

   1.是带有v-前缀的特殊属性.

   2.功能:当表达式的值改变时,将其产生的连带影响,响应式的作用于DOM.

       1.  v-text:显示数据

       2.  v-once:数据只会更新一次,下次更新数据不影响dom

       3.  v-html:可以显示html元素

<div id="app">
            <div v-text="msg"></div>
            <!--简写-->
            <div>{{msg}}</div>
            <hr />
            <div v-once>{{txt}}</div>
            <hr />
            <div>{{tpl}}</div>
            <div v-html="tpl"></div>
        </div>
    </body>
    <script type="text/javascript">
        var app = new Vue({
            el:"#app",
            data:{
                msg:"Hello",
                txt:"Hello Vue",
                tpl:"<h2>上海</h2>"
            }
        });
    </script>

2.class与style绑定

   1.v-bind  可以绑定元素的属性,动态给属性赋值

      比如: v-bind:class(:class)   v-band:style(:style)   v-bind:href(:href)

     v-bind的简写形式

        v-bind:属性名="组件中定义的数据"    简写为  :属性名="组件中定义的数据"

<body>
<
div id="app"> <div title="你好">Hello</div> <hr /> <div v-bind:title="msg">你好,我是大尤,你觉得Vue怎么样?</div> <div :title="msg">你好,我是大尤,你觉得Vue怎么样?</div> <hr /> <img :src="src"/> <a :href="href">Vue</a> </div>
</body>
<script type="text/javascript"> var app = new Vue({ el:"#app", data:{ msg:"Vue is very good", src:"https://cn.vuejs.org/images/logo.png", href:"https://cn.vuejs.org/" } }); </script>

  2.class绑定   

绑定DOM对象的class样式有以下几种形式:

         1.绑定多个class
         2.使用对象classObject绑定
         3.使用数组classList绑定
         4.绑定的对象可以同时切换多个class
     对象和数组绑定的区别:对象可以控制class的添加和删除;数组不能控制删除

<body>
<div id="app">
            <div class="red green item">Vue</div>
            <hr />
            <div :class="{red:true,green:false,item:true}">Vue</div>
            <div :class="classObj">Vue</div>
            <div :class="classList">Vue</div>
        </div>
    </body>
    <script type="text/javascript">
        var app = new Vue({
            el:"#app",
            data:{
                classObj:{
                    red:true,
                    green:false,
                    item:true
                },
                classList:["red","item","test"]
            }
        });
    </script>

3.style绑定

绑定形式跟class一致:
1.使用内联对象Object
2.直接传入对象styleObject
3.使用数组对象styleList

<body>
<div id="app">
            <div style="color:red;font-size: 30px;">我是文本</div>
            <div :style="{'color':'red','font-size':'30px'}">我是文本</div>
            <div :style="styleObj">我是文本</div>
            <div :style="[styleObj,styleObj2]">我是文本</div>
        </div>
    </body>
    <script type="text/javascript">
        var app = new Vue({
            el:"#app",
            data:{
                styleObj:{
                    'color':'red',
                    'font-size':'30px',
                    'font-family':'楷体'
                },
                styleObj2:{
                    'background':'pink'
                }
            }
        });
    </script>

三.事件处理

1.监听事件

     v-on:事件名     简写:   @事件名

<body>
  <div id="app">
      count:{{count}} &nbsp;
    <button v-on:click="count++">add</button>
    <button @click="count--">down</button>
    </div>
</body>
<script type="text/javascript">
    var app = new Vue({
        el:"#app",
        data:{
            count:0
            }
        });
</script>

2.事件方法

  v-on:事件名       简写:   @事件名

  方法事件处理器;
         1.一般来说事件会绑定一个方法,在方法内部处理相关的事件逻辑.
         2.需要在methods属性中定义方法,然后v-on引用对应相关的方法名.

<body>
   <div id="app">
    count:{{count}} &nbsp;
    <button @click="addCount()">add</button>
    <button @click="downCount">add</button>
   </div>
</body>
<script type="text/javascript">
        var app = new Vue({
            el:"#app",
            data:{
                count:0
            },
            methods:{
                addCount:function(){
                    this.count++;
                },
                downCount:function(){
                    this.count--;
                }
            }
        });
</script>

3.$event事件

  在事件处理函数中访问 DOM 原生事件 event 对象,可以使用特殊变量$event 对象传入.

4.事件修饰符

在事件处理程序中调用 event.preventDefault()(阻止元素发生默认行为) 或 event.stopPropagation()(阻止事件冒泡到父元素) 是非常常见的需求。
为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。通过由点 (.) 表示的指令后缀来调用修饰符。
stop : 阻止event冒泡,等效于event.stopPropagation()
prevent : 阻止event默认事件,等效于event.preventDefault()
capture : 事件在捕获阶段触发
self : 自身元素触发,而不是子元素触发
once : 事件只触发一次

<body>
<div id="app">
            <div @click="father">
                <div @click="child">child</div>
            </div>
            <hr />
            <!--stop : 阻止event冒泡,等效于event.stopPropagation(-->
            <div @click="father">
                <div @click.stop="child">child</div>
            </div>
            <hr />
            
            <!--prevent : 阻止event默认事件,等效于event.preventDefault()-->
            <a href="http://www.baidu.com" @click.prevent="prevent1">百度</a>
            <hr />
            
            <!--capture : 事件在捕获阶段触发-->
            <div @click.capture="father">
                <div @click.capture="child">child</div>
            </div>
            
            <!--self : 自身元素触发,而不是子元素触发-->
            <hr />
            <div @click.self="father">
                father
                <div @click="child">child</div>
            </div>
            <hr />
            
            <!--once : 事件只触发一次-->
            <div @click.once="child">child</div>
        </div>
    </body>
    <script type="text/javascript">
        var app = new Vue({
            el:"#app",
            data:{
                
            },
            methods:{
                father:function(){
                    console.log("父元素...");
                },
                child:function(){
                    console.log("子元素...");
                },
                prevent1:function(){
                    console.log("666....");
                }
            }
            
        });
    </script>

5.键值修饰符

键值修饰符
在监听键盘事件时,我们经常需要监测常见的键值。Vue 允许为 v-on 在监听键盘事件时添加关键修饰符:
.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right

<body>
<div id="app">
            <form action="http://www.shsxt.com">
                <input v-on:keyup.enter="submit">
                
                <!-- 只有在 keyCode 是 13 时调用 submit() -->
                <input v-on:keyup.13="enterKey">
            </form>
        </div>
    </body>
    <script type="text/javascript">
        var app = new Vue({
            el:"#app",
            data:{
                
            },
            methods:{
                enterKey:function(){
                    console.log("enter...");
                }
                
            }
            
        });
    </script>

四.条件渲染

1、v-if
当条件返回true时,执行
2、v-else
当if条件不满足时,执行(要结合v-if一起使用)
3、v-else-if
当满足条件时执行(要结合v-if一起使用)

4、v-show
满足条件时显示,不满足隐藏

v-if 和 v-show
两者的区别是v-if是“真正”的条件渲染,只有为true时才会被渲染。v-if也是“惰性”的,假如初始条件为false,那么条件变为true时才会发生第一次渲染。
v-show只是CSS的display属性的切换,不论初始条件是否成立,都会进行html渲染,然后改变display的值为none或者block。
一般来说v-if开销比较大,如果需要频繁切换显示不显示使用v-show,需要进行条件判断的但是改变很少的使用v-if。

<body>
<div id="app">
            <div v-if="flag">你能看见我!</div>
            &nbsp; {{flag}}
            <hr />
            <h3 v-if="age==18">
                张三是18岁
            </h3>
            <h3 v-else>
                张三不是18岁
            </h3>
            
            
            <hr />
            <h3 v-if="age>18">
                成年啦
            </h3>
            <h3 v-else-if="age==18">
                刚成年
            </h3>
            <h3 v-else>
                小屁孩
            </h3>
            
            <hr />
            <h4 v-show="flag">你能看见我!</h4>
            
            
        </div>
    </body>
    
    <script type="text/javascript">
        new Vue({
            el:"#app",
            data:{
                flag:false,
                age:18
            }
        });
        
    </script>

五.列表渲染

1.v-for

可以把一组值进行列表渲染,语法形式: item in items,
items 是源数据数组并且 item 是数组元素迭代的别名。
在 v-for 块中,对父作用域属性的完全访问权限。v-for 还支持一个可选的第二个参数为当前项的索引。
v-for也可以遍历对象,可以指定三个形参:
形式: v-for="(value, key, index) in object"
value: 对象的值
key: 对象的键
index: 遍历的索引

<body>
<div id="app">
            <ul>
                <li v-for="item in items">{{item.name}}</li>
            </ul>
            <hr />
            <ul>
                <li v-for="(item,index) in items">{{type}}--{{index}}--{{item.name}}</li>
            </ul>
            <hr />
            <ul>
                <li v-for="(value,key,index) in person">{{index}}--{{key}}--{{value}}</li>
            </ul>
        </div>
    </body>
    
    <script type="text/javascript">
        new Vue({
            el:"#app",
            data:{
                type:"水果",
                items:[
                    {name:'西瓜'},
                    {name:'苹果'},
                    {name:'菠萝'}
                    ],
                    person:{
                    name:'Tim',
                    age:12,
                    love:'music'
                }
            }
        });
        
    </script>

2.key属性

<body>
        <div id="app">
            <ul>
                <li v-for="item in items" :key="item.id">{{item.name}}</li>
            </ul>
            
        </div>
    </body>
    
    <script type="text/javascript">
        new Vue({
            el:"#app",
            data:{
                items:[
                     {id:1,name:'西瓜'},
                     {id:2,name:'苹果'},
                     {id:3,name:'菠萝'}
                    ],
                    
            }
        });
        
    </script>

3.v-for取值范围

<body>
        <div id="root">
            <h3 v-for="index in 10">{{index}}</h3>
            
        </div>
    </body>
    <script type="text/javascript">
        new Vue({
            el:"#root"
            
        });
    </script>

六.表单输入绑定

1.表单效验

<body>
        <!--
            判断用户名长度不小于6
        -->
        <div id="root">
            <!--v-model:双向绑定,作用于表单元素,-->
            用户名:<input type="text" v-model="uname" @input="validTxt" /> <span :class="validClass">{{msg}}</span>
        </div>
    </body>
    <script type="text/javascript">
        var app = new Vue({
            el:"#root",
            data:{
                uname:"",
                msg:"",
                validClass:""
            },
            methods:{
                validTxt:function(){
                    console.log(this.uname);
                    // 判断用户名的长度是否大于等于6
                    if (this.uname.length >= 6) {
                        this.msg="验证成功"
                        this.validClass = "success";
                    } else {
                        this.msg="验证失败"
                        this.validClass = "error";
                    }
                }
            }
            
        });
    </script>

2.表单输入绑定

1.用 v-model 指令在表单控件元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。
2.v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值。因为它会选择 Vue 实例数据来作为具体的值。通过 JavaScript 在组件的 data 选项中声明初始值。
3.单个使用时v-model是逻辑值:true和false,多个一起使用需要指定value值,选中结果绑定v-model的数组。

<body>
<div id="root">
            <!--文本框-->
            <input type="text" v-model="txtMsg" placeholder="请输入用户名..." />
            文本值:{{txtMsg}}
            
            <br /><hr /><br />
            <!--复选框-->
            <input type="checkbox" v-model="ck" /> &nbsp;选中状态:{{ck}}
            <br />
            <input type="checkbox" value="HTML5" v-model="lesson"> <label>HTML5</label>
            <input type="checkbox" value="JavaScript" v-model="lesson"> <label>JavaScript</label>
            <input type="checkbox" value="Vue" v-model="lesson"> <label>Vue</label>
            <p>多选结果:{{lesson}}</p>
            
            <br /><hr /><br />
            <!--单选框-->
            <input type="radio" value="yes" v-model="love"><label>喜欢</label>
            <input type="radio" value="no" v-model="love"><label>不喜欢</label>
            <input type="radio" value="all" v-model="love"><label>都喜欢</label>
               <p>是否喜欢: {{love}}</p>
               
               <br /><hr /><br />
            <!--下拉框-->
               <select v-model="selected">
                <option>西瓜</option>
                <option>苹果</option>
                <option>菠萝</option>
            </select>
            <h3>结果: {{selected}}</h3>
            
        </div>
    </body>
    <script type="text/javascript">
        var app = new Vue({
            el:"#root",
            data:{
                txtMsg:"",
                ck:"",
                lesson:[],
                love:"",
                selected:""
            }
        
            
        });
    </script>

3.下拉框绑定

<body>
<div id="root">
            <select v-model="selected">
                <option v-for="item in list" :value="item.value">{{item.text}}</option>
            </select>
            
        </div>
    </body>
    <script type="text/javascript">
        var app = new Vue({
            el:"#root",
            data:{
                 list:[
                    {text:'西瓜', value:'1'},
                    {text:'苹果', value:'2'},
                    {text:'菠萝', value:'3'}
                 ],
                 selected:3
            }
        
            
        });
    </script>

4.修饰符

使用v-model绑定数据后,可以使用修饰进行数据处理:
.lazy:绑定数据默认实时更新,lazy可以在onChange触发
.number:返回数字类型的值,转换不成返回NaN
.trim:去除数据的前后空格

<body>
<div id="app">
            <p><input type="text" v-model.lazy="name">{{name}}</p>
            <p><input type="text" v-model.number="age"></p>
            <p><input type="text" v-model.trim="cont"></p>
            <p><button @click="show();">显示值</button></p>
        </div>
</body>    
<script type="text/javascript">
            
            new Vue({
                el:"#app",
                data:{
                    name:"",
                    age:"",
                    cont:""
                },
                methods:{
                    show:function(){
                        console.log(this.name);
                        console.log(typeof this.age);
                        console.log(this.age);
                        console.log(this.cont);
                    }
                }
            });
    </script>

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄