zoukankan      html  css  js  c++  java
  • day66 vue指令、示例成员

    复习

    vue框架的优势:
    	中文API
    	单页面应用:提高移动端app运行速度
    	数据的双向绑定:变量全局通用
    	数据驱动:只用数据,不需要在意DOM结构
    	虚拟DOM:缓存机制
    
    2、vue如何页面中引用
    	1)通过script标签引入vue.js环境
    	2)创建vue实例
     	3)通过el进行挂载
    	new Vue({
    		el:'#app',//css3选择器,唯一性,html、body不能作为挂载点,一个页面可以有多个实例对应多个挂载点
    )
    
    3、插值表达式:
    	{{ 变量以及变量的简单运算 }}
    	{{ (num*10)+'string).split('')[0] }}
    
    4、文本指令
    	{{ }}   v-text  v-html   v-once
    
    5、方法指令
    	v-on:事件='变量'  | @事件='
    

    指令

    表单指令

    语法:
    v-model=“变量” 变量值与表单标签的value相关
    v-model可以实现数据的双向绑定,v-model绑定的变量值可以影响表单标签的值,反过来表单标签的值也可以影响变量的值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <form action="">
            <!--重点-->
            <input type="text" name="user" id="user" placeholder="请输入账号" v-model="v1">
            <input type="text" v-model="v1">
            {{ v1 }}
            <hr>
            <!--1.单选框-->
            男:<input type="radio" name="sex" value="male" v-model="v2">
            女:<input type="radio" name="sex" value="female" v-model="v2">
            {{ v2 }}
            <hr>
            <!--2.单一复选框-->
            卖身契:同意 <input type="checkbox" name="agree" v-model="v3">
            {{ v3 }}
            <hr>
            <!--3.多复选框-->
            爱好:<br>
            男: <input type="checkbox" name="hobbies" value="male" v-model="v4">
            女: <input type="checkbox" name="hobbies" value="female" v-model="v4">
            其他: <input type="checkbox" name="hobbies" value="other" v-model="v4">
            {{ v4 }}
            <hr>
            <button type="submit">提交</button>
        </form>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                v1:'123',
                v2:'male',
                v3:false,
                v4:['male']
            }
        })
    </script>
    </html>
    

    条件指令

    语法:
    v-show=’布尔变量‘ false时 display:none进行渲染 隐藏
    v-if=’布尔变量‘ false时 前端不渲染(保证不渲染的数据泄露)

    ​ v-if | v-else-if |v-else

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            [v-cloak] { display: none; }
            .box {
                 200px;
                height: 200px;
            }
            .r { background-color: red }
            .b { background-color: blue }
            .g { background-color: green }
    
            .active { background-color: deeppink }
    
        </style>
    </head>
    <body>
    <div id="app" v-cloak>  <!-- 保障刷新页面不会出现卡-->
        <div class="box r" v-show="is_show"></div>
        <div class="box b" v-if="is_show"></div>
    
        <div class="wrap">
            <div>
                <button @click="page='r_page'" :class="{ active: page==='r_page'}">红</button>
                <button @click="page='b_page'" :class="{ active: page==='b_page'}">蓝</button>
                <button @click="page='g_page'" :class="{ active: page==='g_page'}">绿</button>
            </div>
            <div class="box r" v-if="page==='r_page'"></div>
            <div class="box b" v-else-if="page==='b_page'"></div>
            <div class="box g" v-else></div>
        </div>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                is_show:false,
                page:'r_page'
            }
        })
    </script>
    </html>
    

    循环指令

    语法:
    v-for='value in string|arrayj'
    v-for='(value,index) in string|arrayj'
    v-for='(ele,key,index) in obj'

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="app">
            <span>{{ info }}</span>
            <hr>
            <i v-for="c in info">{{ c }} </i>
            <hr>
            <i v-for="(c,i) in info">{{ i }}:{{ c }} </i>
            <hr>
    
            <div v-for="e in stus">{{ e }}</div>
            <hr>
            <div v-for="(e,i) in stus">{{ i }}:{{ e }}</div>
            <hr>
    
            <div v-for="v in people">{{ v }}</div>
            <hr>
            <div v-for="(v,k,i) in people">{{ i }}-{{ k }}:{{ v }}</div>
            <hr>
    
            <div v-for="tea in teas">
                <span v-for="(v,k,i) in tea">{{ i }}-{{ k }}:{{ v }}</span>
            </div>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                info:'good good study',
                stus:['Bob','Tom','Jerry'],
                people:{
                    name:'武勇',
                    age:24,
                    sex:'女'
                },
                teas:[
                    {
                        name:'武勇',
                        age:24,
                        sex:'女'
                    },
                    {
                        name:'阿忠',
                        age:24,
                        sex:'女'
                    },
                    {
                        name:'阿文',
                        age:24,
                        sex:'女'
                    },
                ]
            }
        })
    </script>
    </html>
    

    循环指令案例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            li:hover {
                color:red;
                cursor:pointer; /* 鼠标箭头变成了手指*/
            }
        </style>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model="comment">
            <button type="button" @click="send_msg">留言</button>
            <ul>
                <li v-for="(msg,i) in msgs" @click="delete_msg(i)">{{ msg }}</li>
            </ul>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                comment:'',
                msgs:localStorage.msgs ? JSON.parse(localStorage.msgs) : [],
            },
            methods:{
                send_msg(){
                    //将comment添加到数组中:unshift push 首尾增 | shift pop 首尾删
                    //this.msgs.push(this.comment);
    
                    //数组操作最全的方法:splice(begin_index,count,...args)
                    //this.msgs.splice(0,0,1) 在0位置插入数据1
                    //this.msgs.splice(0,1) 在0位置删除一个数据
                    //this.msgs.splice(0,1,1) 在0位置更改一个数据为1
    
                    if (!this.comment){
                        alert('请输入内容');
                        return false
                    }
                    this.msgs.push(this.comment);
                    this.comment='';
    
                    localStorage.msgs=JSON.stringify(this.msgs)
                },
                delete_msg(index){
                    this.msgs.splice(index,1);
                    localStorage.msgs=JSON.stringify(this.msgs)
                }
            }
        })
    </script>
        //前台数据库
        //localStorage:永久存储
        //sessionStorage:临时存储(所属页面标签被关闭之后你,清空)
    
        //存
        //localStorage.n1=10;
        //sessionStorage.n2=20
    
        //取
        //console.log(localStorage.n1)
        //console.log(sessionStorage.n2)
    
        //数组等类型需要先序列化成JSON
        //localStorage.arr=JSON.stringify([1,2,3])
        //console.log(JSON.parse(localStorage.arr))
    <!--</html>-->
    

    示例成员

    分隔符(了解)

    delimiters:通过delimiters可以将{{ }} 换成其他的符号

    <body>
        <div id="app">
            {{ msg }}
            {[ msg ]}
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                msg:'message'
            },
            delimiters:['{[',']}']//修改插值表达式符号
        })
    </script>
    </html>
    

    过滤器

    filters 传入所有要过滤的条件,返回值就是过滤的结果

    总结:
    1、在filters成员中定义过滤器的方法
    2、可以对多个值进行过滤,过滤时还可以额外传入辅助参数
    3、过滤的结果可以在进行下一次过滤(过滤的串联)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="app">
            <p>{{ num|f1 }}</p>
            <p>{{ a,b|f2(30,40) |f3 }}</p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                num:10,
                a:10,
                b:20
            },
            filters:{
                //传入所有要过滤的条件,返回值就是过滤的结果
                f1 (num) {
                    console.log(num);
                    return num*10
                },
                f2(a,b,c,d){
                    console.log(a,b,c,d);
                    return a+b+c+d;
                },
                f3(num){
                    return num*num;
                }
            }
        })
    </script>
    </html>
    

    计算属性

    computed 计算

    总结:
    1、computed计算属性可以声明,方法属性(方法属性一定不能在data中重复声明)
    2、方法属性必须在页面中渲染,才会启动绑定的方法,方法属性的值就是绑定方法的返回值
    3、绑定的方法中出现的所有变量都会被监听,任何一个变量发生值更新都会重新触发绑定方法,从而更新方法属性的值
    一般用来解决的问题,一个变量值依赖于多个变量值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="app">
            <input type="number" min="0" max="100" v-model="n1">+
            <input type="number" min="0" max="100" v-model="n2">=
            <button>{{ result }}</button>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                n1:'',
                n2:'',
            },
            computed:{
                result(){
                    console.log('被调用了')
                    n1=+this.n1;
                    n2=+this.n2;
                    return n1+n2
                }
            }
        })
    </script>
    </html>
    

    监听属性

    watch 监听 不需要返回值

    n是监听的属性当前值,o是其上一次的值,监听的属性每次更新都会回调监听方法

    总结
    1、监听的属性需要在data中声明,监听方法不需要返回值
    2、监听的方法名就是监听的属性名,该属性值发生更新都会回调监听方法
    3、监听方法有两个回调参数,当前值n,上一个值o
    一般用来解决的问题,多个变量值依赖于一个变量值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    <body>
        <div id="app">
            <p>姓名: <input type="text" v-model="full_name"></p>
            <p>姓: {{ first_name }}</p>
            <p>名: {{ last_name }}</p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                full_name:'',
                first_name:'未知',
                last_name:'未知'
            },
            watch:{
                full_name(n,o){
                    name_arr=n.split('')
                    this.first_name=name_arr[0]
                    this.last_name=name_arr[1]
                }
            }
        })
    
    </script>
    </html>
    

    冒泡排序

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    </body>
    <script>
        let arr=[3,2,5,4,1];
        console.log(arr);
        for (let i=0;i<arr.length-1;i++){//外层循环控制趟数
            for (let j=0;j<arr.length-1-i;j++){//内存循环控制比较次数
                if (arr[j]>arr[j+1]){
                    let temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        console.log(arr)
    
         stus = [
            {
                name: 'Bob',
                grade: 98
            },
            {
                name: 'Tom',
                grade: 87
            },
            {
                name: 'Jerry',
                grade: 92
            },
        ];
        for (let i=0;i<stus.length-1;i++){//外层循环控制趟数
            for (let j=0;j<stus.length-1-i;j++){//内存循环控制比较次数
                if (stus[j].grade>stus[j+1].grade){
                    let temp = stus[j];
                    stus[j] = stus[j + 1];
                    stus[j + 1] = temp;
                }
            }
        }
        console.log(stus)
    </script>
    </html>
    
  • 相关阅读:
    JSON特殊字符的处理
    java中高并发和高响应解决方法
    对redis深入理解
    对java中arraylist深入理解
    Redis的字典扩容与ConcurrentHashMap的扩容策略比较
    PHP压缩上传图片
    windows 平台 php_Imagick 拓展遇到的那些坑!
    windows7下php5.4成功安装imageMagick,及解决php imagick常见错误问题。(phpinfo中显示不出来是因为:1.imagick软件本身、php本身、php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个文件放到/php/目录下面)
    php使用imagick模块实现图片缩放、裁剪、压缩示例
    文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/12057504.html
Copyright © 2011-2022 走看看