zoukankan      html  css  js  c++  java
  • Vue (表单、斗篷、条件、循环指令,分隔符成员、计算属性成员、属性的监听、vue组件、子组件、各个常见的钩子函数)

    表单指令

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>表单指令</title>
    </head>
    <body>
        <div id="app">
            <form action="">
                <!--属性指令:v-model="变量",v-model绑定的变量控制的是表单元素的value值 -->
    
                <!--普通表单元素,用v-model直接绑定变量控制value值-->
                <input type="text" v-model="v1">
                <input type="text" v-model="v1">
                <textarea name="" id="" cols="30" rows="10" v-model="v1"></textarea>
                <p>{{ v1 }}</p>
                <hr>
    
                <!--单一复选框-->
                同意:
                <input type="checkbox" name="agree" v-model="v2">
                <hr>
                <!--多个复选框-->
                男:<input type="checkbox" name="hobbies" value="male" v-model="v3">
                女:<input type="checkbox" name="hobbies" value="female" v-model="v3">
                哇塞:<input type="checkbox" name="hobbies" value="wow" v-model="v3">
                <p>{{ v3 }}</p>
                <hr>
    
                <!--单选框-->
                中午吃啥:<br>
                肉肉:<input  name="food" type="radio" value="rourou" v-model="v4">
                饭饭:<input name="food" type="radio" value="fanfan" v-model="v4">
                <p>{{ v4 }}</p>
                <hr>
                <button type="submit">提交</button>
            </form>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                v1: '',
                v2: false,  // false
                v3: ['male', 'wow'],
                v4: 'rourou',
            }
        })
    </script>
    </html>
    

    斗篷指令

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>斗篷指令</title>
        <style>
            [v-cloak] {
                display: none;
            }
        </style>
    </head>
    <body>
        <div id="app" v-cloak>
            <p>{{ msg }}</p>
            <p>{{ msg }}</p>
            <p>{{ msg }}</p>
            <p>{{ msg }}</p>
            <p>{{ msg }}</p>
            <p>{{ msg }}</p>
            <p>{{ msg }}</p>
            <p>{{ msg }}</p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                msg: 12345
            }
        })
    </script>
    </html>
    

    条件指令

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <!--条件指令:
                v-if="true|false",为假时,在页面上不渲染,可以隐藏标签中的信息
                v-show="true|false",为假时,在页面中用display:none渲染,虽然没展示,但是仍在页面结构中
            -->
            <p v-if="false">if指令</p>
            <p v-show="false">show指令</p>
    
            <!-- v-if是一个家族
            v-if
            v-else-if
            v-else
            1、上分支成立,下分支会被屏蔽
            2、else分支只要在所有上分支都为假时显示,且不需要条件
            -->
            <p v-if="v1 === '1'">if分支</p>
            <p v-else-if="v1 === '2'">elif分支1</p>
            <p v-else-if="v1 === '3'">elif分支2</p>
            <p v-else>else分支</p>
            <hr>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                v1: '2'
            }
        })
    </script>
    </html>
    

    条件指令案例

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>条件指令案例</title>
        <style>
            .box {
                 400px;
                height: 200px;
            }
            .r { background-color: red }
            .y { background-color: yellow }
            .g { background-color: green }
    
            .action {
                background-color: pink;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <p>
                <button @click="changeC('red')" :class="{action: c === 'red'}">红</button>
                <!--<button @click="changeC('red')" :class="c === 'red'? 'action': ''">红</button>-->
                <button @click="changeC('yellow')" :class="{action: c === 'yellow'}">黄</button>
                <button @click="changeC('green')" :class="{action: c === 'green'}">绿</button>
            </p>
            <div class="wrap">
                <div class="box r" v-if="c === 'red'"></div>
                <div class="box y" v-else-if="c === 'yellow'"></div>
                <div class="box g" v-else></div>
            </div>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        // sessionStorage的生命周期与页面标签绑定,当标签页被关闭,数据库被清空
        // localStorage是前台永久数据库
    
        // sessionStorage.name = '123';
        // localStorage.name = 'xyz';
        // localStorage.clear();
    
    
        new Vue({
            el: '#app',
            data: {
                // 页面重新刷新加载,可以从数据库中获取缓存,如果没有,再取默认值
                // c: 'red',
                c: localStorage.c ? localStorage.c : 'red',
            },
            methods: {
                changeC(color) {
                    this.c = color;
                    // 每一次改变c的值,将值同步到前台数据库
                    localStorage.c = color;  // 存
                }
            }
        })
    </script>
    </html>
    

    循环指令

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <!--循环指令:
                v-for=""
                语法:
                v-for="成员 in 容器"
            -->
            <!--1、字符串循环渲染: 可以只遍历值,也可以遍历值与索引-->
            <p>
                <span v-for="v in title">{{ v }}</span>
            </p>
    
            <p>
                <span v-for="(v, i) in title">
                    <span v-if="i != 0"> | </span>
                    {{ v }}
                </span>
            </p>
    
            <!--2、数组循环渲染: 可以只遍历值,也可以遍历值与索引-->
            <div>
                <p v-for="(v, i) in arr">第{{ i }}元素:{{ v }}</p>
            </div>
    
            <!--3、对象循环渲染: 可以只遍历值,也可以遍历值与键,还可以遍历值、键与索引-->
            <div>
                <p v-for="v in people">{{ v }}</p>
            </div>
            <div>
                <p v-for="(v, k) in people">{{ k }}:{{ v }}</p>
            </div>
            <div>
                <p v-for="(v, k, i) in people">{{ i }}-{{ k }}:{{ v }}</p>
            </div>
            <br>
    
            <div>
                <div v-for="(stu, i) in stus">
                    <hr v-if="i != 0">
                    <p v-for="(v, k) in stu">{{ k }}:{{ v }}</p>
                </div>
            </div>
    
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                title: '循环指令',
                arr: [1, 4, 2, 5, 3],
                people: {
                    name: '兔子',
                    color: '粉白',
                    price: 6.66,
                },
                stus: [
                    {
                        name: "Bob",
                        age: 18
                    },
                    {
                        name: "Tom",
                        age: 17
                    },
                    {
                        name: "Jerry",
                        age: 19
                    }
                ]
            }
        })
    </script>
    </html>
    

    循环指令案例

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model="msg">
            <button @click="send_comment">留言</button>
            <ul>
                <li v-for="(v, i) in comments" @click="deleteMsg(i)">{{ v }}</li>
            </ul>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                msg: '',
                comments: []
            },
            methods: {
                send_comment() {
                    // 数组的增
                    // push pop unshift shift splice
                    // this.comments.unshift(this.msg);
                    // this.comments.splice(0,0,0);
                    if (this.msg) {
                        this.comments.push(this.msg);  // 留言
                        this.msg = '';  // 留言后清空输入框
                    }
                },
                deleteMsg(index) {
                    this.comments.splice(index, 1);
                }
            }
        })
    </script>
    <script>
    
        // 数组操作万能方法,可以完成增删改
        let arr = [1, 2, 3];
        // 参数:开始索引,操作长度,操作的结果们
        arr.splice(2, 0, 100);
        arr.splice(1, 1);
        console.log(arr);
    
    </script>
    
    </html>
    

    分隔符成员

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>分隔符</title>
    </head>
    <body>
        <div id="app">
            <p>{{ num }}</p>
            <!--<p>{[ num ]}</p>-->
            <p>{ num ]}</p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                num: 100
            },
            // 用来修改插值表达式符号
            // delimiters: ['{[', ']}'],
            delimiters: ['{', ']}'],
        })
    </script>
    </html>
    

    计算属性成员

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model="v1">
            +
            <input type="text" v-model="v2">
            =
            <button>{{ res }}</button>
    
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                v1: '',
                v2: '',
                // res: '结果',
            },
            // 1、computed中定义的是方法属性,data中定义的也是属性,所以不需要重复定义(省略data中的)
            // 2、方法属性的值来源于绑定的方法的返回值
            // 3、方法属性必须在页面中渲染后,绑定的方法才会被启用(调用)
            // 4、方法中出现的所有变量都会被监听,任何变量发生值更新都会调用一次绑定的方法,重新更新一下方法属性的值
            // 5、方法属性值不能手动设置,必须通过绑定的方法进行设置
            computed: {
                res () {
                    console.log('该方法被调用了');
                    return this.v1 && this.v2 ? +this.v1 + +this.v2 : '结果';
                }
            }
        })
    </script>
    <script>
        console.log(1 + '2');
        console.log(1 - '2');
        console.log(+'2');
    </script>
    </html>
    

    属性的监听

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>属性的监听</title>
    </head>
    <body>
        <div id="app">
            <p>
                姓名:<input type="text" v-model="full_name">
            </p>
            <p>
                姓:<span>{{ first_name }}</span>
            </p>
            <p>
                名:<span>{{ last_name }}</span>
            </p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                full_name: '',
                first_name: '',
                last_name: '',
            },
            watch: {
                // 1、watch中给已有的属性设置监听方法
                // 2、监听的属性值一旦发生更新,就会调用监听方法,在方法中完成相应逻辑
                // 3、监听方法不需要返回值(返回值只有主动结束方法的作用)
                full_name() {
                    if (this.full_name.length === 2) {
                        k_v_arr = this.full_name.split('');
                        this.first_name = k_v_arr[0];
                        this.last_name = k_v_arr[1];
                    }
                }
            }
        })
    </script>
    </html>
    

    vue组件

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            {{ msg }}
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        /**
         * 1、组件:由html、css、js三部分组成的独立单位,可以类似于变量,重复使用
         * 2、组件其实就是vue实例(对象),一个组件就是一个vue实例(对象)
         * 3、new Vue()产生的也是实例(对象),所以也是组件,我们称之为 根组件
         *      一个页面建议只出现一个根组件(项目开发模式下,一个项目建议只出现一个根组件)
         * 4、组件的html页面结构有 template 实例成员提供
         *      template提供的html结构是用来构虚拟DOM
         *      真实DOM最终会被虚拟DOM替换
         *      根组件一般不提供template,就由挂载点el来提供构建虚拟DOM的页面结构,根组件如果提供了template,还需要设置挂载点作为替换占位
         *      template模板有且只有一个根标签
         */
        let c1 = '';
        new Vue({
            el: '#app',
            data: {
                msg: '12345',
                c1: 'red'
            },
            template: `
            <div id="app">
                <p :style="{color: c1}">{{ msg }}</p>
                <p @click="clickAction">{{ msg }}</p>
            </div>
            `,
            methods: {
                clickAction() {
                    console.log(this.msg)
                }
            }
        })
    </script>
    </html>
    

    子组件

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>子组件</title>
    </head>
    <body>
        <!--根组件的template-->
        <div id="app">
            <!--在根组件template中加载的组件,称之为根组件的子组件-->
            <my-tag></my-tag>
            <my-tag></my-tag>
            <my-tag></my-tag>
    
            <tag></tag>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        // 1、定义组件
        // 2、注册组件
        // 3、使用组件
    
        // 如何定义子组件:组件就是一个普通对象,内部采用vue语法结构,被vue注册解释后,就会成为vue组件
        let myTag = {
            template: `
            <div>
                <h3>子组件</h3>
                <p>我是自定义的子组件</p>
            </div>
            `,
        };
    
        // 了解:全局组件,不要注册就可以直接使用
        Vue.component('tag', {
            template: `
            <div>
                <h3>全局组件</h3>
                <p>我是自定义的全局组件</p>
            </div>
            `,
        });
    
    
        new Vue({
            el: '#app',
            components: {
                // 'my-tag': myTag,
                // myTag: myTag,
                myTag,
            }
        })
    </script>
    </html>
    

    知识点总结



    ## 知识点总结
    """
    1、v-model完成表单指令,简单的控制value,单选框中的使用,单独复选框的使用以及复选框中的使用
    	<input type="password" v-model="控制value的变量" />
    
    2、了解:斗篷指令解决页面闪烁
    	v-cloak =>  [v-cloak] {display:none} => 加载vue就会清除v-cloak属性
    
    3、条件指令v-if与v-show区别,v-if家族成员以及上分支会成立会屏蔽下分支的工作机制
    	v-if不渲染隐藏 | v-show以display:none渲染隐藏
    	v-if | v-else-if | v-else
    
    4、循环指令v-for如何循环渲染字符串、数组、字典,以及需要嵌套循环渲染赋值结构
    	v-for="v in str"  v-for="(v,i) in str"
    	v-for="v in arr"  v-for="(v,i) in arr"
    	v-for="v in dic"  v-for="(v,k) in dic"  v-for="(v,k,i) in dic"
    	[{},{}] {a:[]} [str1,str2]
    
    5、了解:delimiters实例成员解决插值表达式符号冲突
    	delimiters: ['{{', '}}']
    
    6、计算属性(方法属性)在computed中声明,方法内部变量会被监听,值来源于方法返回值
    	computed: {
    		methodAttr() {
    			// 内部出现的变量都会被监听,发生值更新会回调该方法
    			return '方法属性的值'
    		}
    	}
    	
    7、监听watch可以设置数据的监听方法,在监听属性更新时,完成特定逻辑
    	watch: {
    		attr() {
    			// attr属性被监听,发生值更新会回调该方法
    		}
    	}
    	
    8、重点:组件的概念,组件就是vue实例(对象)
    	<div id="app">
    		<tag />
    		<tag />
    	</div>
    	
    	let tag = {
    		template: '<p>子组件</p>'
    	}
    	
    	new Vue({
    		el: '#app',
    		components: {
    			tag,
    		}
    	})
    
    
    9、创建、注册、使用子组件的三部曲
    	
    	
    	定义组件
    	
    	let myTag = {
        	template: `
            <div>
                <h3>子组件</h3>
                <p>我是自定义的子组件</p>
            </div>
            `,
        };
        
        
    	注册组件
    	
    	new Vue({
            el: '#app',
            components: {
                // 'my-tag': myTag,
                // myTag: myTag,
                myTag,
            }
        })
        
        
    	使用组件
    	
    	<body>
        <!--根组件的template-->
        <div id="app">
            <!--在根组件template中加载的组件,称之为根组件的子组件-->
            <my-tag></my-tag>  #body中的-在js中就是大写
            <my-tag></my-tag>
            <my-tag></my-tag>
        </div>
    </body>
    	
    """
    

    浅谈vue中的钩子函数

  • 相关阅读:
    第四周编程总结
    第三周编程总结
    第二周编程总结
    查找整数 编程总结
    求最大值及其下标 编程总结
    C语言I博客作业04
    C语言I博客作业03
    C语言I博客作业02
    作业01
    第八周作业
  • 原文地址:https://www.cnblogs.com/michealjy/p/11846086.html
Copyright © 2011-2022 走看看