zoukankan      html  css  js  c++  java
  • Vue-笔记

    表单指令v-model

    • 表单指令, 顾名思义就是用在form表单中的
    • 它的使用方法: v-model="变量", 这个v-model 就相当于input标签的 value 属性, 只不过他俩可以互相影响
    • 可以实现数据的双向绑定, 变量的值可以影响表单标签的值, 反过来表单标签的值也可以影响变量的值
    Copy<body>
    <div id="d1">
        <form action="">
            <!--变量的值可以影响标签的值, 标签的值也可以影响变量的值-->
            用户名:<input type="text" name="username" v-model="v1" placeholder="请输入用户名">
            <!--上面输入什么, 这里就展示什么-->
            <input type="text" v-model="v1">
            {{ v1 }}
            <hr>
    
            <!--1.单选框-->
            男:<input type="radio" name="gender" value="male" v-model="v2">
            女:<input type="radio" name="gender" value="female" v-model="v2">
            {{ v2 }}
            <hr>
    
            <!--2.单一复选框, true|false-->
            卖身抵债: 同意 <input type="checkbox" name="agree" v-model="v3">
            {{ v3 }}
            <hr>
    
            <!--3.复选框-->
            爱好: <br>
            男:<input type="checkbox" name="hobby" value="male" v-model="v4">
            女:<input type="checkbox" name="hobby" value="female" v-model="v4">
            其他:<input type="checkbox" name="hobby" value="other" v-model="v4">
            {{ v4 }}
            <hr>
    
            <button type="submit">提交</button>
            
        </form>
    </div>
    
    
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el: '#d1',
            data: {
                v1: 'username',
                v2: 'male',
                v3: false,
                v4: ['female', 'male']
            }
        })
    </script>
    

    条件指令v-if

    • 条件指令就是用户控制这个标签到底在不在页面中展示的
    • v-show="条件" 隐藏时,既条件为false时, 采用display: none进行渲染
    • v-if="条件" 隐藏时,既条件为false时, 不在进行渲染, 右键检查根本就找不到相关代码
    • v-if="条件" | v-else-if="条件" | v-else
    Copy<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>条件指令</title>
        <style>
            .box {
                height: 200px;
                 200px;
            }
    
            .r {
                background-color: red;
            }
    
            .g {
                background-color: green;
            }
    
            .b {
                background-color: blue;
            }
            .active {
                background-color: yellow;
            }
        </style>
    
    </head>
    <body>
    <div id="d1">
        <!--当is_show为false时, display:none-->
        <div class="box r" v-show="is_show"></div>
        <!--当is_show为false时, 直接不渲染, 右键检查找不到代码-->
        <div class="box g" v-if="is_show"></div>
        <hr>
    
        <!--点击相应按钮显示对应颜色的box,且该按钮高亮-->
        <div class="wrap">
            <button @click="boxColor='r'" :class="{active: boxColor === 'r'}">红</button>
            <button @click="boxColor='g'" :class="{active: boxColor === 'g'}">绿</button>
            <button @click="boxColor='b'" :class="{active: boxColor === 'b'}">蓝</button>
    
            <div class="box r" v-if="boxColor === 'r'"></div>
            <div class="box g" v-else-if="boxColor === 'g'"></div>
            <div class="box b" v-else></div>
    
        </div>
    </div>
    
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el: '#d1',
            data: {
                is_show: false,
                boxColor: 'r'
            }
        })
    </script>
    </body>
    </html>
    

    循环指令v-for

    • v-for="v in string|array|obj
    • v-for="(v, i ) in string|array
    • v-for="(v, k, i) in dict
    Copy<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>循环指令</title>
    
    </head>
    <body>
    <div id="d1">
        <p>{{ msg }}</p>
        <span v-for="v in msg">{{ v }} </span>
        <br>
        <!--i:索引-->
        <span v-for="(v, i) in msg">{{ i }}:{{ v }} </span>
        <hr>
        <!--对字典进行for循环拿到的是值-->
        <div v-for="v in infoDic">{{ v }}</div>
        <!--k:键, i:索引-->
        <div v-for="(v, k, i) in infoDic">{{ i }}-{{ k }}:{{ v }}</div>
        <hr>
        
    </div>
    
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el: '#d1',
            data: {
                msg: 'easy come easy go',
                infoDic: {
                    name: 'bigb',
                    age: '18',
                    gender: 'male'
                },
            }
        })
    </script>
    </body>
    </html>
    

    分隔符delimiters

    • delimiters属性, 用来修改差值表达式的符号, 以解决语法冲突问题, 比如Django的模板语法: {{ }} 和Vue的查找表达式符号: {{ }}
    • delimiters: [ "[{" "}]" ] 就是将Vue的差值表达式符号变成了 [{ }]
    Copy<body>
    <div id="d1">
        <p>{{ msg }}</p>
        <p>[{ msg }]</p>
    
    </div>
    
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el: '#d1',
            data: {
                msg: 'easy come easy go',
                },
            // 将Vue的差值表达式符号变成 [{ }]
            delimiters: [ '[{',  '}]' ],
        })
    </script>
    </body>
    

    过滤器filters

    • 在Vue对象中的filter属性中定义过滤方法
    • 可以对多个值进行过滤, 既过滤方法可传入多个参数, 也可以传入额外的辅助参数
    • 过滤的结果可以再进行下一次过滤, 既可以多个过滤器串联
    Copy<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>过滤器</title>
    
    </head>
    <body>
    <div id="d1">
        <p>{{ a|f1 }}</p>
        <!--可以对多个值进行过滤, 也可以传辅助参数-->
        <p>{{ a, b, c|f2(40)}}</p>
        <!--可以对过滤的结果进行再过滤-->
        <p>{{ a, b, c|f2(40)|f3}}</p>
    
    </div>
    
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el: '#d1',
            data: {
                a: 10,
                b: 20,
                c: 30,
                },
            filters: {
                // 传入需要过滤的值, 返回过滤结果
                f1(arg) {
                    return arg * 10
                },
                f2(arg1, arg2, arg3, arg4) {
                    return arg1 + arg2 + arg3 + arg4
                },
                f3(arg) {
                    return arg * arg
                }
            }
        })
    </script>
    </body>
    </html>
    

    计算属性computed

    • 在Vue对象中的computed属性中定义计算方法
    • 方法属性的值就是计算方法的返回值
    • 计算方法中出现的所有变量发送变化, 都会触发该方法
    Copy<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>计算属性</title>
    </head>
    <body>
    <div id="d1">
        <input type="number" min="0" max="100" v-model="n1">
        +
        <input type="number" min="0" max="100" v-model="n2">
        =
        <!--调用在computed中定义的result方法, 并渲染出返回值-->
        <button>{{ result }}</button>
    
    </div>
    
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el: '#d1',
            data: {
                n1: '',
                n2: '',
            },
            computed: {
                result() {
                    // 计算方法中出现的任何变量的值发生变化, 都会触发该方法
                    n1 = +this.n1;
                    n2 = +this.n2;
                    return n1 + n2
                }
            }
        })
    </script>
    </body>
    </html>
    

    监听属性watch

    • 监听就是监听某个变量的值是否发生了变化, 一旦变化就会触发监听方法
    • 在Vue对象的watch属性中定义监听方法, 方法名与被监听的变量名相同
    • 监听方法不需要返回值
    • 监听方法可以传两个参数, 一个是变量的当前值n, 一个是变量上一个值o
    Copy<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>监听属性</title>
    </head>
    <body>
    
    <div id="d1">
        <p>姓名:<input type="text" v-model="fullName"></p>
        <p>姓:<input type="text" v-model="lastName"></p>
        <p>名:<input type="text" v-model="firstName"></p>
    </div>
    
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el: '#d1',
            data: {
                fullName: '',
                firstName: '',
                lastName: '',
            },
            watch: {
                // 对fullName进行监听
                fullName(n, o) {
                    // n表示变量的当前值, o表示变量的上一次的值
                    this.firstName = n.slice(1);
                    this.lastName = n.slice(0, 1);
                }
            }
        })
    </script>
    </body>
    </html>
    

    前端数据库

    • localStorage: 永久存储
    • sessionStorage: 临时存储, 所在页面标签被关闭后, 清空
    Copy// 存
    localStorage.n1 = 10;
    sessionStorage.n2 = 20;
    
    
    // 取
    let a = localStorage.n1
    let b = sessionStorage.n2
    
    // 存取数组等数据类型需要进行序列化和反序列化
    localStorage.arr = JSON.stringify([1, 2, 3])
    let arr = JSON.parse(localStorage.arr)
    
    // 清空数据库
    localStorage.clear()
    
  • 相关阅读:
    Windows下安装MySQLdb(mysql-python)报错解决
    关于安装bettercap的ERROR: Failed to build gem native extension 报错解决
    Centos6 下启动httpd报错 Could not reliably determine the server's解决方法
    Linux安装mysql-python库时报错解决办法
    [Flask]学习Flask第三天笔记总结
    [原创+实战+钓鱼]setoolkit+映射
    [实战]挖掘CSRF姿势
    [实战]记一次PUT方法拿下网站shell
    JAVA二维数组小记
    技术杂谈
  • 原文地址:https://www.cnblogs.com/1012zlb/p/12121894.html
Copyright © 2011-2022 走看看