day-77vue框架

vue

什么是vue:

  渐进式 JavaScript 框架,一个html到整个项目的使用,也可以称为完成前后台分离的前端框架

前端三大主流框架:

  Angular   React   Vue 

优点:

1)单页面      硬件要求低
2)组件化开发
3)数据驱动
4)数据的双向绑定
5)虚拟DOM
6)轻量级

vue的指令

1.文本指令(v-text    v-html    v-once

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>文本指令</title>
</head>
<body>
    <div id="app">
       
        <p>{{ msg }}</p>                                     <!--1、插值表达式:在内部直接写变量或变量表达式-->
        <p>{{ (num + 1 - 3) / 2 }}</p>

        <!--2、v-text v-html v-once 三个文本指令 -->
        
        <p v-text="msg"></p>                                 <!--2.v-text(同插入表达式):纯文本-->                              注:msg是"变量名"
       
        <p v-html="'<b>加粗文本</b>'"></p>                     <!--3.v-html:可以解析标签-->                                     注:直接写字符串,就相当于直接转换
        <p v-html="htmlMSG" @click="changeMsg"></p>
         
       
        <p v-once="htmlMSG">{{ htmlMSG  }}</p>                <!--4.v-once:插值表达式渲染文本,once来限制文本不可修改-->           注:就是把变量变成常量
    </div>                                                    <!--插值表达式中一个变量被限制,整个结果都被限制-->
</body>


<script src="js/vue.js"></script>
<script>
    new Vue({                                                  1、创建vue实例与页面标签进行绑定,该实例就可以控制该标签机内部所有标签
    
        el: '#app',                                            2、挂载点:与页面标签绑定的关键,具有唯一性
        
        data: {                                                3、变量要传的数据
            msg: 'message',
            num: 10,
            htmlMSG: '<b>加粗文本</b>'
        },
        
        methods: {                                            4、methods控制所有事件
            changeMsg: function () {
               this.htmlMSG = '<i>加粗文本</i>';              5、this就是这个vue实例
               
            }
        }
    })
</script>
</html>

2.事件指令(v-on:click @click

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>事件指令</title>
    <style>
       
        [v-cloak] {                                                   <!--v-cloak:斗篷指令,避免闪烁-->
            display: none;
        }
    </style>
</head>
<body>
    <div id="app" v-cloak aaa="123">                                 <!--v-cloak:斗篷指令,避免闪烁-->
    
       

        
        <p v-on:click="clickAction">单击</p>                          <!--1、基础的事件绑定-->
        <p v-on:dblclick="dblclickAction">双击</p>

        
        <ul>
            <li v-on:click="liAction(0)">{{ li1 }}</li>                <!--2、绑定事件并传参-->                  注:函数里面可以传数字,也可以是字符串
            <li v-on:click="liAction(1)">222</li>
            <li v-on:click="liAction(2)">333</li>
        </ul>

        
        <p v-on:click="sysAction1">不传自定义参数</p>                    <!--3、传递ev事件对象(如鼠标点击的位置)-->               注:这里没有参数,默认返回ev
        
        <p v-on:click="sysAction2(888, $event)">传自定义参数</p>                                                             注:这里加括号不返回ev ,并且 $event能传递ev

       
        <p @click="clickAction">单击</p>                               <!--4、v-on: 可以简写为 @ -->
    </div>
</body>




<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
              li1: '111'
        },
        methods: {
            clickAction: function () {
                alert('点击')
            },
            dblclickAction () {
                alert('双击')
            },
            liAction (index) {
              
                alert(index);
            },
            sysAction1 (ev) {
                console.log(ev)
            },
            sysAction2 (num, ev) {
                console.log(num);
                console.log(ev);
            }

        }

    })
</script>
</html>

3.属性指令(v-bind:   :

扫描二维码关注公众号,回复: 6976581 查看本文章
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>属性指令</title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background-color: orange;
        }
        .wrap {
            width: 100px;
            height: 100px;
            background-color: red;
        }

        .kiss {
            width: 150px;
            height: 150px;
            background-color: cyan;
        }
        .x {
            width: 300px;
        }
        .y {
            height: 300px;
        }
        .z {
            background-color: brown;
        }
    </style>
</head>
<body>
    <div id="app">

     
        <div class="box" v-bind:style="myStyle" @click="changeColor('pink')"></div>    

     
        <div class="box" v-bind:style="{'width': w}" @click="changeWidth"></div>       <!--1、操作单个样式:w变量的值就是为属性width提供数据的-->
 
      
        <div class="box" v-bind:style="more_style" @click="changeStyle"></div>          <!--2、操作多个样式: more_style是一个变量,可以赋值多个key:value样式,如下-->

        
        <div :aaa="AAA">简写v-bind</div>                                                <!--3、v-bind: 可以简写为 :,可以绑定所有系统和自定义属性,属性一旦绑定,后方就是变量 -->

       
       
        <div :class="c1" @click="changeClass"></div>                                   <!--4、操作单个类名-->
                                                                                            <!--a.直接赋值:c1就是变量,变量的值就是类名-->
       
        <div :class="{kiss: kiss_able}"></div>                                                <!--布尔切换:该div有一个kiss类名,kiss_able的true或false决定kiss是否生效-->
                                                                                            <!--{ 类名(字符串) :变量}-->

        
        <div :class="[x, y, {z: is_z}]"></div>                                         <!--5、操作多个类名: [变量1, ..., 变量n] 每个变量的值都是该标签的类名 -->
                                                                                            <!--这里的z就是变量的值-->    

    </div>
</body>


<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            myStyle: 'background-color: red;',
            w: '400px',
            more_style: {
                width: '100px',
                height: '100px',
                borderRadius: '50%',
                backgroundColor: 'cyan'
            },
            AAA: 'BBB',                                               #AAA的属性为BBB
            c1: 'wrap',
            kiss_able: true,
            x: 'x',
            y: 'y',
            // z: 'z',
            is_z: true
        },
        methods: {
            changeColor (color) {
                this.myStyle = 'background-color: ' + color + ';'
            },
            changeWidth () {
                this.w = '500px'
            },
            changeStyle () {
                this.more_style.borderRadius = '30%'                  #修改一个

             
            },
            changeClass () {
                if (this.c1 === 'box') {
                    this.c1 = 'wrap';
                } else {
                    this.c1 = 'box';
                }

                // 布尔类型值来回切换
                this.kiss_able = !this.kiss_able;                    #当点击的时候是true就变为flase,反之亦然
            }
        }
    })
</script>
</html>

4.表单指令(v-model

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <div id="app">
        

       
        <input type="text" v-model="val">                                                          <!--1、数据的双向绑定-->
        <input type="text" v-model="val">
        <p>{{ val }}</p>                                                                         <!--打印val变量的结果-->

        <form action="">
        
            
            <input type="password" v-model="val">                                                 <!--2、普通输入框: 直接绑定变量即可 -->

            
            <p>
                <label for="male"></label>                                                     <!--3、单选框-->
                                                                                                     <!--radio_val的值是多个单选框中一个的value值,代表该单选框默认选中,本质是自动绑定值,如下-->    
                <input id="male" type="radio" value="male" v-model="radio_val" name="sex">
                <label for="female"></label>
                <input id="female" type="radio" value="female" v-model="radio_val" name="sex">
                <button @click="alertValue">单选框提交给后台的value</button>
                <span>{{ radio_val  }}</span>
            </p>

          
            <p>                                                                                      <!--4、独立使用的复选框 -->
                                                                                                        <!--sure_val的值为true|false,决定该单个复选框是否选中,如下-->
                <input type="checkbox" name="sure" value="同意" v-model="sure_val">
                <span>{{ sure_val }}</span>
            </p>
          
         
            <p>                                                                                      <!--5、复选框-->
                                                                                                        <!--hobby_val的值是数组,里面用来存放复选框所有选项的值,值存在代表该选框选中,如下--><input type="checkbox" value="male" name="hobby" v-model="hobby_val"><input type="checkbox" value="female" name="hobby" v-model="hobby_val">
                哇塞<input type="checkbox" value="?" name="hobby" v-model="hobby_val">
                <span>{{ hobby_val }}</span>
            </p>

            <p>
                <input type="submit">
            </p>
        </form>

    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        
        data: {
            val: '',
            
            radio_val: 'male',
            
            sure_val: true,
            
            hobby_val: ['?', 'male']
        },
        methods: {
            alertValue () {
                alert(this.radio_val)
            }
        }
    })
</script>
</html>

5.条件指令(v-if  v-else-if  v-else)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        [v-cloak] {
            display: none;
        }
        .box {
            width: 200px;
            height: 200px;
        }
        .b1 {background-color: orange;}
        .b2 {background-color: cyan;}

        .r {background-color: red;}
        .b {background-color: blue;}
        .g {background-color: green;}
    </style>
</head>
<body>
    <div id="app" v-cloak>
        
        <p>
            <button @click="toggleAction(true)">显示</button>
            <button @click="toggleAction(false)">隐藏</button>
        </p>
        
        <div class="box b1" v-if="is_show"></div>                <!--v-if在隐藏时,不被渲染 | v-show在隐藏时,采用display: none存在,两者绑定的变量值都是 true|false-->
        <div class="box b2" v-show="is_show"></div>

        
        <p>                                                        <!--2、v-if、v-else-if、v-else 分支家族,用法同下 -->
            <button @click="toggleShow('red')"></button>
            <button @click="toggleShow('blue')"></button>
            <button @click="toggleShow('green')">绿</button>
        </p>
        <div class="box r" v-if="color == 'red'"></div>
        <div class="box b" v-else-if="color == 'blue'"></div>
        <div class="box g" v-else></div>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            is_show: false,
            
            color: 'red'
        },
        methods: {
            toggleAction(is_show) {
                this.is_show = is_show;
            },
            
            toggleShow(color) {
                this.color = color;
            }
        }
    })
</script>
</html>

猜你喜欢

转载自www.cnblogs.com/klw1/p/11318498.html
77