93.【Vue-细刷-02】

news2025/1/11 22:58:02

Vue-02

  • (十六)、基本列表渲染 (v-for)
    • 1.使用v-for遍历`数组`
    • 2.使用v-for遍历`对象`
    • 3.使用v-for遍历`字符串`
  • (十七)、列表过滤 (filter())
    • 1.⭐JS中Change属性的原生状态⭐
    • 2.使用watch监听实现
    • 3.const {xxx} = this 在Vue的作用⭐
    • ⭐4.JS箭头函数参数的简写⭐
    • 5.使用computed进行计算实现(最优)
    • 6.关于过滤函数的总结
  • (十八)、列表排序和列表更新和收集表单数据
    • 1.列表排序
    • 2.列表更新
    • 3.收集表单数据
  • (十九)、Vue实列的生命周期
    • 1.SetTimeout和setInterval定时函数
    • 2.引出生命周期
    • 3.Vue生命周期_挂载流程
        • (1).第一阶段的beforeCreate()
        • (2).第二阶段created()
        • (3).第三阶段:解析视图()
        • (4). 第四阶段:beforeMount() ==挂载前==
        • (5).第五阶段:Mounted()==挂载==
    • 4.Vue生命周期_更新_销毁流程
        • (6).第六阶段: beforeUpdate() ==只有更新数据的时候会调用==
        • (7).第七阶段:updated()
        • (8).第八阶段:销毁前beforeDestory()和销毁$destyored()

(十六)、基本列表渲染 (v-for)

1.使用v-for遍历数组

  • 这里我们必须要设置一个key值,虽然key值已经不被报错。但是我们还是要设置,因为我们的数据要根据key进行后期维护.这里我们要进行绑定 data的数据
  • v-for,里面隐含一个遍历出来的 Value 以及 index
  • Vue的遍历借助的是 for in 循环的操作
  • 我们的表达式要写成Value的值并不是data区域的值
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>人员列表信息</h2>

        <!-- 使用v-for 遍历数组 -->

        <ul>
        <!-- 在这里我们只需要对列表进行循环即可,传进来的第一个是value,第二个是index.Vue的循环遍历借助于 for in   -->
            <li v-for="(value,index) in persons" :key="persons.id">{{value.id}}--{{value.name}}--{{value.age}}</li>  
        </ul>
        
    </div>
    <script>
        new Vue({
            el: '#root',
            data: {
                // 列表信
                persons:[
                    {id:'001',name:'吉士先生1',age:18},
                    {id:'002',name:'吉士先生2',age:28},
                    {id:'003',name:'吉士先生3',age:38},
                    {id:'004',name:'吉士先生4',age:48}
                ]
            }
        });
    </script>
</body>

</html>

在这里插入图片描述

2.使用v-for遍历对象

  • 这里存放着两个值: 第一个是Value,第二个是 Key值
  • 我们RestulMatch里面写的是 Value 并不是data区域里面的数据
  • Key值的也要进行单项数据绑定
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>小汽车信息</h2>
        <ul>
			<li v-for="(Value,Key) in car" :key="Key">{{Value}}</li>
        </ul>
        
    </div>
    <script>
        new Vue({
            el: '#root',
                car:{
                    name:'领克06',
                    price:'13w',
                    color:'灰色'
                }
            }
        });
    </script>
</body>

</html>

在这里插入图片描述

3.使用v-for遍历字符串

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <!-- 
            v-for指令:
                1.用于展示列表数据
                2.语法: v-for='(item,index) in car' :key='item.id'
                3.可遍历: 数组 对象
         -->
        <h2>人员列表信息</h2>
        <!-- 使用v-for 遍历数组 -->
        <ul>
        <!-- 在这里我们只需要对列表进行循环即可,传进来的第一个是value,第二个是index.Vue的循环遍历借助于 for in   -->
            <li v-for="(value,index) in persons" :key="persons.id">{{value.id}}--{{value.name}}--{{value.age}}---{{index}}</li>  
        </ul>
        <h2>小汽车信息</h2>
        <ul>
            <li v-for="(Value,Key) in car" :key="Key">{{Value}}---{{Key}}</li>
        </ul>
        <h2>遍历字符串</h2>
        <ul>
            <li v-for="(Value,index) in str">{{Value}}---{{index}}</li>
        </ul>

    </div>
    <script>
        new Vue({
            el: '#root',
            data: {
                // 列表信
                persons:[
                    {id:'001',name:'吉士先生1',age:18},
                    {id:'002',name:'吉士先生2',age:28},
                    {id:'003',name:'吉士先生3',age:38},
                    {id:'004',name:'吉士先生4',age:48}
                ],
                car:{
                    name:'领克06',
                    price:'13w',
                    color:'灰色'
                },
                str:'asdsdsd'
            }
        });
    </script>
</body>

</html>

在这里插入图片描述

(十七)、列表过滤 (filter())

1.⭐JS中Change属性的原生状态⭐

Computed的数据修改会保留原数据,Watch的数据修改不保留原数据

  • 当我们失去焦点值得时候,我们的信息才会显示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" id="shuru">
    <script type="text/javascript">
        const shuru=document.getElementById("shuru");
        shuru.addEventListener('change',()=>{
            console.log('1');
        })
    </script>
</body>
</html>

在这里插入图片描述

2.使用watch监听实现

  • 我们监听关键字,假如关键字发生变化 我们就进行过滤,并且进行替换
  • 过滤一次少一次,回不到过去了。因为这里一直在改变原数据
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <!-- 
            v-for指令:
                1.用于展示列表数据
                2.语法: v-for='(item,index) in car' :key='item.id'
                3.可遍历: 数组 对象
         -->
        <h2>人员列表信息</h2>
        <input type="text" v-model="keywords">
        <!-- 使用v-for 遍历数组 -->
        <ul>
            <!-- 在这里我们只需要对列表进行循环即可,传进来的第一个是value,第二个是index.Vue的循环遍历借助于 for in   -->
            <li v-for="(value,index) in persons" :key="persons.id">
                {{value.id}}--{{value.name}}--{{value.age}}---{{index}}</li>
        </ul>


    </div>
    <script>
        new Vue({
            el: '#root',
            data: {
                // 列表信
                persons: [
                    { id: '001', name: '马冬梅', age: 18 },
                    { id: '002', name: '周冬雨', age: 28 },
                    { id: '003', name: '周杰伦', age: 38 },
                    { id: '004', name: '温兆伦', age: 48 }
                ],
                keywords:''
            },
            // 使用watch修改元数据。会导致元数据的丢失
            watch: { //当检测的数据发生改变的时候,就会调用我们这个方法
                keywords(newValue){
                    const arr=this.persons.filter((p,index)=>{
                        return p.name.indexOf(newValue)!=-1;
                    });
                    this.persons=arr;
                }
            }
        });
    </script>
</body>

</html>

在这里插入图片描述

3.const {xxx} = this 在Vue的作用⭐

const {aaa,bbb,ccc}=this;
=>
const aaa=this.aaa;
const bbb=this.bbb;
const ccc=this.ccc;

⭐4.JS箭头函数参数的简写⭐

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button id="bttn">请点击我唤醒数据</button>
    <script type="text/javascript">
        var x=10;
        var btn=document.getElementById('bttn');
        btn.addEventListener('click',x=>{
            alert(x);
            console.log(x);
        });
    </script>
</body>
</html>

        btn.addEventListener('click',(x)=>{
            alert(x);
            console.log(x);
        });
  • ⭐在箭头函中,我们如果没有参数必须要写小括号
    -⭐ 在箭头函数中,假如我们的参数有1个,后面不跟return,就可以省略大括号和小括号,否则不可以
    -⭐ 在箭头函数中,假如我们的参数有多个,我们也要加小括号

5.使用computed进行计算实现(最优)

想要对数据加工后再展示,且不想要破坏元数据,最好就使用计算属性

  • 这里并不会破坏原有数据,只是通过计算得出来
  • 这里我们遍历的是计算后的值,并不是原始的
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">

        <h2>人员列表信息</h2>
        <!-- 
            想要对数据加工后再展示,且不想要破坏元数据,最好就使用计算属性
         -->
        <input type="text" v-model="keywords">
        <ul>
            <li v-for="(value,index) in fmtPersons" :key="persons.id">
                {{value.id}}--{{value.name}}--{{value.age}}---{{index}}</li>
        </ul>


    </div>
    <script>
        new Vue({
            el: '#root',
            data: {
                // 列表信
                persons: [
                    { id: '001', name: '马冬梅', age: 18 },
                    { id: '002', name: '周冬雨', age: 28 },
                    { id: '003', name: '周杰伦', age: 38 },
                    { id: '004', name: '温兆伦', age: 48 }
                ],
                keywords:''
            },
            computed: {
                fmtPersons(){
                    const {keywords} = this;    //这里相当于 const keywords=this.keywords;
                    return this.persons.filter(p=>p.name.indexOf(keywords)!==-1);
                }
            }
            // 使用watch修改元数据。会导致元数据的丢失
            // watch: { //当检测的数据发生改变的时候,就会调用我们这个方法
            //     keywords(newValue){
            //         const arr=this.persons.filter((p,index)=>{
            //             return p.name.indexOf(newValue)!=-1;
            //         });
            //         this.persons=arr;
            //     }
            // }
        });
    </script>
</body>

</html>

在这里插入图片描述

6.关于过滤函数的总结

过滤函数:就是假如说数据满足条件那么我们就返回这些数据,不满足的我们就淘汰不进行获取数据。⭐我们先获取data区域的Kyewords信息,假如说文本框的数值发生变化,我们就开始进行实时计算,然后对数组进行过滤。里面的方法是箭头函数。假如说p.name的值和indexOf的值不等于-1,那么就满足数据。

  • ⭐前提是调用filter()的前面得到元素需要是数组
  • ⭐给函数中传值的是遍历的Value 和 index
  • ⭐过滤器返回的是true或则false true不过滤,false过滤
p=>p.name.indexOf(keywords)!==-1
相当于
function (p){
	return p.name.indexOf(keywords)!==-1
}
会返回ture 或则 false 
    <script>
        new Vue({
            el: '#root',
            data: {
                // 列表信
                persons: [
                    { id: '001', name: '马冬梅', age: 18 },
                    { id: '002', name: '周冬雨', age: 28 },
                    { id: '003', name: '周杰伦', age: 38 },
                    { id: '004', name: '温兆伦', age: 48 }
                ],
                keywords:''
            },
            computed: {
                fmtPersons(){
                    const {keywords} = this;    //这里相当于 const keywords=this.keywords;
                    return this.persons.filter(p=>p.name.indexOf(keywords)!==-1);
                }
            }
            // 使用watch修改元数据。会导致元数据的丢失
            // watch: { //当检测的数据发生改变的时候,就会调用我们这个方法
            //     keywords(newValue){
            //         const arr=this.persons.filter((p,index)=>{
            //             return p.name.indexOf(newValue)!=-1;
            //         });
            //         this.persons=arr;
            //     }
            // }
        });
    </script>

(十八)、列表排序和列表更新和收集表单数据

1.列表排序

这里的sort函数,是API自带的方法。并且它会对原数据进行修改。假如说需要升序的话,就是前面的参数减去后面的参数。如果需要降序的话,就是后面的参数减去前面的参数。如果需要原数据的话,我们就需要在升序和降序的前面增加一个if判断。0就是假,非0就是真。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
{{sortType}}
        <h2>人员列表信息</h2>
        <!-- 
            想要对数据加工后再展示,且不想要破坏元数据,最好就使用计算属性
         -->
        <input type="text" v-model="keywords">
        <button @click="sortType=1">按照升序进行排序</button>
        <button @click="sortType=2">按照降序进行排序</button>
        <button @click="sortType=0">按照原顺序进行排序</button>
        <ul>
            <li v-for="(value,index) in fmtPersons" :key="persons.id">
                {{value.id}}--{{value.name}}--{{value.age}}---{{index}}</li>
        </ul>


    </div>
    <script>
        new Vue({
            el: '#root',
            data: {
                // 列表信
                persons: [
                    { id: '001', name: '马冬梅', age: 18 },
                    { id: '002', name: '周冬雨', age: 28 },
                    { id: '003', name: '周杰伦', age: 38 },
                    { id: '004', name: '温兆伦', age: 48 }
                ],
                sortType:0,  // 0代表原顺序,1代表升序,2代表降序
                keywords:''
            },
            computed: {
                fmtPersons(){
                    const {keywords,sortType} = this;    //这里相当于 const keywords=this.keywords;
                    // 先过滤,过滤之后存放在一个数组中。
                    let arr= this.persons.filter(p=>p.name.indexOf(keywords)!==-1);
                    // 在过滤的数组中再进行排序
                    if(sortType){  // 假如说需要排序
                        arr.sort((a,b)=>{  // sort函数会影响原数据,所以我们只需要sort就行了,不需要对其进行接受了。
                            if(sortType===1){return a.age-b.age;}   //假如说按照年龄升序的话就是前面的减去后面的。
                            else{return b.age-a.age}  //假如说按照年龄降序的话就是后面的减去前面的。
                        })
                    }
                    return arr;
                }
            }
        });
    </script>
</body>
</html>

在这里插入图片描述

2.列表更新

我们点击更新数据,会在控制台打印数据。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>

    <div id="root">
        <h2>人员列表信息</h2>
        <!-- 
            想要对数据加工后再展示,且不想要破坏元数据,最好就使用计算属性
         -->
        <input type="text" v-model="keywords">
        <button @click="sortType=1">按照升序进行排序</button>
        <button @click="sortType=2">按照降序进行排序</button>
        <button @click="sortType=0">按照原顺序进行排序</button>
        <button @click="updateMei">更改马冬梅的信息</button>
        <ul>
            <li v-for="(value,index) in fmtPersons" :key="persons.id">
                {{value.id}}--{{value.name}}--{{value.age}}---{{index}}</li>
        </ul>
    </div>
    <script>
        new Vue({
            el: '#root',
            data: {
                // 列表信
                persons: [
                    { id: '001', name: '马冬梅', age: 18 },
                    { id: '002', name: '周冬雨', age: 48 },
                    { id: '003', name: '周杰伦', age: 38 },
                    { id: '004', name: '温兆伦', age: 28 }
                ],
                sortType:0,  // 0代表原顺序,1代表升序,2代表降序
                keywords:''
            },
            methods: {
              updateMei(){
                    console.log(this.persons);
              }  
            },
            computed: {
                fmtPersons(){
                    const {keywords,sortType} = this;    //这里相当于 const keywords=this.keywords;
                    // 先过滤,过滤之后存放在一个数组中。
                    let arr= this.persons.filter(p=>p.name.indexOf(keywords)!==-1);
                    // 在过滤的数组中再进行排序
                    if(sortType){  // 假如说需要排序
                        arr.sort((a,b)=>{  // sort函数会影响原数据,所以我们只需要sort就行了,不需要对其进行接受了。
                            if(sortType===1){return a.age-b.age;}   //假如说按照年龄升序的话就是前面的减去后面的。
                            else{return b.age-a.age}  //假如说按照年龄降序的话就是后面的减去前面的。
                        })
                    }
                    return arr;
                }
            }
        });
    </script>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Vue的源码也就是 get和set. set负责两件事情:"第一个: 改数据;第二个: 更新页面"

Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括:

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

解决方案:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>

    <div id="root">
        <!-- 
            Vue数据绑定的原理:
            1.vue会监视data中所有层次对象的属性,哪怕是数组中对象。
            2.对象中的属性数据通过添加set方法来实现监视
            3.数组中也实现了监视:重写数组一系列更新元素的方法,做了如下的两件事:
                1).调用原生对应的方法对元素进行处理
                2).去更新页面
         -->
        <h2>人员列表信息</h2>
        <!-- 
            想要对数据加工后再展示,且不想要破坏元数据,最好就使用计算属性
         -->
        <input type="text" v-model="keywords">
        <button @click="sortType=1">按照升序进行排序</button>
        <button @click="sortType=2">按照降序进行排序</button>
        <button @click="sortType=0">按照原顺序进行排序</button>
        <button @click="updateMei">更改马冬梅的信息</button>
        <ul>
            <li v-for="(value,index) in fmtPersons" :key="persons.id">
                {{value.id}}--{{value.name}}--{{value.age}}---{{index}}</li>
        </ul>
    </div>
    <script>
        new Vue({
            el: '#root',
            data: {
                // 列表信
                persons: [
                    { id: '001', name: '马冬梅', age: 18 },
                    { id: '002', name: '周冬雨', age: 48 },
                    { id: '003', name: '周杰伦', age: 38 },
                    { id: '004', name: '温兆伦', age: 28 }
                ],
                sortType:0,  // 0代表原顺序,1代表升序,2代表降序
                keywords:''
            },
            methods: {
              updateMei(){
                    // 第一种:一个个的写 
                    // this.persons[0].name='佩奇';
                    // this.persons[0].age=0;
                    //第二种:全部写
                    // 如果使用对象的格式进行修改的话,我们的id不要忘记。要改全改 不改都不改
                    // this.persons[0]={id:'001',name:'小儿脾气',age:44}
                    //第三种:使用Vue重写的push方法。
                    // this.persons[0]={'name':'吉士先生',age:-1}
                    // this.persons.push();  //1.调用原有的push方法,2.刷新页面。
                    console.log(this.persons);
              }  
            },
            computed: {
                fmtPersons(){
                    const {keywords,sortType} = this;    //这里相当于 const keywords=this.keywords;
                    // 先过滤,过滤之后存放在一个数组中。
                    let arr= this.persons.filter(p=>p.name.indexOf(keywords)!==-1);
                    // 在过滤的数组中再进行排序
                    if(sortType){  // 假如说需要排序
                        arr.sort((a,b)=>{  // sort函数会影响原数据,所以我们只需要sort就行了,不需要对其进行接受了。
                            if(sortType===1){return a.age-b.age;}   //假如说按照年龄升序的话就是前面的减去后面的。
                            else{return b.age-a.age}  //假如说按照年龄降序的话就是后面的减去前面的。
                        })
                    }
                    return arr;
                }
            }
        });
    </script>
</body>
</html>

在这里插入图片描述

3.收集表单数据

视觉图

    <div id="root">
        <!-- 我们这里设置的是: 在Label标签下设置for属性.在input标签中设置id属性。使标签和输入框绑定,这样我们只要点标签就会跳到对应的输入框中 -->
        <form action="#sdsd" method="get">
            <label for="account">账号 : </label><input type="text" id="account"  v-><br><br>
            <label for="password">密码 : </label><input type="text" id="password"><br><br>
            性别:<br><input type="radio" name="sex">女:<input type="radio" name="sex"><br><br>
            爱好:<br>
                女孩<input type="checkbox">
                还是女孩<input type="checkbox">
                还是女孩<input type="checkbox">
                <br>
            所属校区:  <br>
                <select>
                    <option value="initial" disabled selected>请选择所属校区</option>
                    <option value="beijing">北京</option>
                    <option value="shanghai">上海</option>
                    <option value="shenzhen">深圳</option>
                </select>  
               <br><br>
            其他信息:<br>
             <textarea cols="30" rows="10"></textarea> 
             <br><br>
             <input type="checkbox" id="authorize"><label for="authorize">阅读并接受</label><a href="http://www.google.com" >《用户协议》</a>   
             <br><br>
             <input type="submit" value="提交">
        </form>
    </div>

总结:

        1.若是<input type="text"/>,我们收集的是字符串
        2.若是<input type="radio"/>,我们收集的还是字符串
        3.若是input type="checkbox">,我们收集的是数组
            1).没有配置input的value属性,那么收集的就是checked (勾选 or 未勾选 是布尔值)
            2).配置了input的value属性
                a).v-model的初始值是非数组,那么收集的就是   checked (勾选 or 未勾选 是布尔值)
                b).v-model的初始值是数组,那么收集的就是value组成的数组
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <!-- 
        1.若是<input type="text"/>,我们收集的是字符串
        2.若是<input type="radio"/>,我们收集的还是字符串
        3.若是input type="checkbox">,我们收集的是数组
            1).没有配置input的value属性,那么收集的就是checked (勾选 or 未勾选 是布尔值)
            2).配置了input的value属性
                a).v-model的初始值是非数组,那么收集的就是   checked (勾选 or 未勾选 是布尔值)
                b).v-model的初始值是数组,那么收集的就是value组成的数组
     -->
    <div id="root">
        <!-- 我们这里设置的是: 在Label标签下设置for属性.在input标签中设置id属性。使标签和输入框绑定,这样我们只要点标签就会跳到对应的输入框中 -->

        <!-- 输入框:我们只需要设置一个v-model就可以了 -->
        <form @submit.prevent="Submit" method="get">
            <label for="account">账号 : </label><input type="text" id="account" v-model:value="username"><br><br>
            <label for="password">密码 : </label><input type="text" id="password" v-model:value="password"><br><br>


            <!--单选框: 这个name是对单选框进行分组的、value是对这个单选框赋值、v-model:value是双向获取value值 -->
            性别:<br><input type="radio" name="Sex" v-model="sex" value="male">女:<input type="radio" name="Sex" v-model="sex"
                value="women"><br><br>

                <!--多选框: 这里我们也要设置value 和 v-model都要设置 -->
            爱好:<br>
            女孩<input type="checkbox" value="women1" v-model="CheckBox">
            还是女孩<input type="checkbox" value="women2" v-model="CheckBox">
            还是女孩<input type="checkbox" value="women3" v-model="CheckBox">
            <br>
            <!-- 下拉框: 我们只需要在option中设置value值,在select中设置v-model就行了 -->
            所属校区: <br>
            <select v-model="Selected">
                <option value="initial" disabled selected>请选择所属校区</option>
                <option value="beijing">北京</option>
                <option value="shanghai">上海</option>
                <option value="shenzhen">深圳</option>
            </select>
            <br><br>
            <!-- 文本域: 我们只需要设置一个v-model就可以了 -->
            其他信息:<br>
            <textarea cols="30" rows="10" v-model="Area"></textarea>
            <br><br>
            <!-- 协议框:我们只需要一个v-model -->
            <input type="checkbox" id="authorize"  v-model="Authorize"><label for="authorize">阅读并接受</label><a
                href="http://www.google.com">《用户协议》</a>
            <br><br>
            <!-- 按钮具有提交的性质 -->
           <button>提交</button>
        </form>
    </div>
    <script type="text/javascript">
        new Vue({
            el: '#root',
            data: {
                username: '2261203961',
                password: '121788',
                sex: '',
                CheckBox: [], //错误
                Selected: 'beijing',
                Area: '123546',
                Authorize:''
            },
            methods: {
                Submit(){
                    console.log(this.username + " "+this.password+" "+this.sex+" "+this.CheckBox+" "+this.Selected+" "+this.Area+" "+this.Authorize);
                    console.log(this._data);
                }
            }
        });
    </script>

</body>
</html>

在这里插入图片描述

(十九)、Vue实列的生命周期

我们的设计思想是这样的: “分手了不活了!!”这段文字每隔200毫秒亮度就减少0.1.我们这里有两种方法:"第一种就是使用Vue的mount挂载,因为mount的挂载会在程序运行的时候一并运行。"第二种就是在Vue外面设置SetTimeout(){},每隔200毫秒调用一次

1.SetTimeout和setInterval定时函数

(1).SetTimeout()和setInterval()出现在Vue的Methods方法区中,必须被其它方法包裹。
这个的效果是点一下有一下的效果。

            methods: {
                death() {
                    console.log("您点击了不活了!!");
                    setTimeout(() => {
                        this.a = this.a - 0.1;
                    }, 200)
                }
            },

(2).SetInterval()和SetTimeout()定时函数允许出现在Vue的Methods方法区中和Mounted钩子中。

            methods: {
                death() {
                    console.log("您点击了不活了!!");
                    setInterval(() => {
                        this.a = this.a - 0.1;
                    }, 200)
                }
            },
            // Vue的实列已经被调用,
            mounted() {   // 我们发现Vue的实列会在程序运行的时候一并运行。
                if (this.a >= 0.5) {
                    setInterval(() => {
                        this.a = this.a - 0.1;
                    }, 200)
                }
            }

这些是: 一直有效果的
(2).SetTimeout()和SetInterval()这个定时函数可以出现在Vue管辖之外的区域。

<script type="text/javascript">
        var vm=new Vue({
            el: '#root',
            data:{
                message:'吉士先生'
            }
        });
        // 设置定时函数,两秒钟后调用函数()=>{},
        setTimeout(()=>{
            vm.message='111'
        },2000)
    </script>

两者的区别
(1).设置在按钮事件上的时候: SetTimeout()点一下有一下效果。SetInterval()一直有效果.
SetInterval()在Methods方法区中
在这里插入图片描述
SetTimeout()在Methods方法中
在这里插入图片描述
(2).设置在Vue之外,Settimeout()只会在初始化的时候运行一次,SetInterval会一直运行
Settimeout()一次
在这里插入图片描述
SetInterval()一直运行
在这里插入图片描述

2.引出生命周期

当销毁的时候,set和get依然存在。但是没有实际的效果了。
mounted()钩子函数,会在程序运行的同时进行运行钩子函数里面的信息

//什么时候会用 $ 符号? 就是Vue自带的可以用$.
// 什么是销毁? vm还在,只是vm不管理root容器的数据了,数据的监听也没了,也就是说:"vm实列依然可以调用,但是没有效果了"。
 this.$destroy();

在对vm销毁之前,我们先调用这个函数

beforeDestroy() {
                clearInterval(this.timer);
            }
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2 :style="{opacity:a}">分手了不活了!!</h2>
        <button @click="death">不活了</button>
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el: "#root",
            data: {
                a: 1,
            },
            methods: {
                death() {
                    console.log("您点击了不活了!!");
                    //什么时候会用 $ 符号? 就是Vue自带的可以用$.
                    // 什么是销毁? vm还在,只是vm不管理root容器的数据了,数据的监听也没了,也就是说:"vm实列依然可以调用,但是没有效果了"。
                    this.$destroy();
                    console.log("this由原来的Vue转变成了")
                }
            },
            // Vue的实列已经被调用,
            mounted() {   // 我们发现Vue的实列会在程序运行的时候一并运行。
                this.timer = setInterval(() => {
                    console.log("正在执行Mounted....");
                    this.a = this.a - 0.01;
                    if (this.a <= 0) this.a = 1;
                }, 16);
            },
            // vm将要被销毁之前,我们先销毁间隔。
            beforeDestroy() {
                clearInterval(this.timer);
            }
        }
        );
    </script>
</body>

</html>

在这里插入图片描述

在这里插入图片描述

3.Vue生命周期_挂载流程

生命周期总图

在这里插入图片描述

(1).第一阶段的beforeCreate()

vm在new Vue的时候就已经创建。这个阶段的vm处于vm初始化前。vm无法访问data中的数据和Methods方法区。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        <h2>当前页面的和为:{{sum}}</h2>
        <button @click="sum+=1">点我+1</button>
    </div>
    <script type="text/javascript">
        // 修改Vue的全局配置
        Vue.config.productionTip=false;  // 关闭所处环境的提示。
        new Vue({
            el:"#root",
            data:{
                sum:0,
            },
            methods: {
                test(){
                    console.log("Methods方法区中的test()方法被调用。")
                }
            },
            // Vue实列初始前   ----------- 01生命周期探索: "无法通过vm访问data中的数据和methods方法。"
            beforeCreate(){
                console.log(this.sum+" "+this.test);
                debugger;
            },
        });
    </script>
</body>
</html>

在这里插入图片描述

(2).第二阶段created()

在这个阶段:我们完成了对实列vm的初始化即(数据代理完成)。可以访问到data的数据和methods的方法,但是我们的视图还尚未解析

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>当前页面的和为:{{sum}}</h2>
        <button @click="add">点我+1</button>
    </div>
    <script type="text/javascript">
        // 修改Vue的全局配置
        Vue.config.productionTip = false;  // 关闭所处环境的提示。
        new Vue({
            el: "#root",
            data: {
                sum: 0,
            },
            methods: {
                add() {
                    this.sum += 1;
                }
            },
            // Vue实列初始前   ----------- 01生命周期探索: "无法通过vm访问data中的数据和methods方法。"
            beforeCreate() {
                console.log("beforeCreate===>无法通过vm访问data中的数据和methods方法");
                console.log(this.sum + " " + this.add); //输出结果: undefined,undefined,undefined,undefined
            },
            // Vue实列初始化完毕---------02生命周期探索:"vm可以访问到data中的数据和methods方法"
            created() {
                console.log("created====>vm可以访问到data中的数据和methods方法")
                console.log(this.sum + " " + this.add); //输出结果: 0 和 function () 
                debugger;
            },
        });
    </script>
</body>

</html>

在这里插入图片描述

(3).第三阶段:解析视图()

开始解析,但是页面还不能展示解析好的内容
这个阶段:首先判断el是否有el绑定。假如说有el绑定。就继续判断是否template。如果没有的话,就使用我们利用el表达式绑定的视图作为template模板。
在这里插入图片描述

(4). 第四阶段:beforeMount() 挂载前

1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>当前页面的和为:{{sum}}</h2>
        <button @click="add" id="btn">点我+1</button>
    </div>
    <script type="text/javascript">
        // 修改Vue的全局配置
        Vue.config.productionTip = false;  // 关闭所处环境的提示。
        new Vue({
            el: "#root",
            data: {
                sum: 0,
            },
            methods: {
                add() {
                    this.sum += 1;
                }
            },
            // Vue实列初始前   ----------- 01生命周期探索: "无法通过vm访问data中的数据和methods方法。"
            beforeCreate() {
                console.log("beforeCreate===>无法通过vm访问data中的数据和methods方法");
                console.log(this.sum + " " + this.add); //输出结果: undefined,undefined,undefined,undefined
            },
            // Vue实列初始化完毕---------02生命周期探索:"vm可以访问到data中的数据和methods方法"
            created() {
                console.log("created====>vm可以访问到data中的数据和methods方法")
                console.log(this.sum + " " + this.add); //输出结果: 0 和 function () 
                
            },
            // Vue实列更新真实页面之前-----04生命周期探索: "1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效"
            beforeMount() {
                console.log("beforeMount===>1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效")
                // 操作Dom元素对按钮的文本信息进行更改
                document.getElementById("btn").innerText="吉士先生";debugger;
            },
        });
    </script>
</body>

</html>

在这里插入图片描述

(5).第五阶段:Mounted()挂载

页面呈现出经过Vue编译过的DOM.2.对DOM操作都有效

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>当前页面的和为:{{sum}}</h2>
        <button @click="add" id="btn">点我+1</button>
    </div>
    <script type="text/javascript">
        // 修改Vue的全局配置
        Vue.config.productionTip = false;  // 关闭所处环境的提示。
        new Vue({
            el: "#root",
            data: {
                sum: 0,
            },
            methods: {
                add() {
                    this.sum += 1;
                }
            },
            // Vue实列初始前   ----------- 01生命周期探索: "无法通过vm访问data中的数据和methods方法。"
            beforeCreate() {
                console.log("beforeCreate===>无法通过vm访问data中的数据和methods方法");
                console.log(this.sum + " " + this.add); //输出结果: undefined,undefined,undefined,undefined
            },
            // Vue实列初始化完毕---------02生命周期探索:"vm可以访问到data中的数据和methods方法"
            created() {
                console.log("created====>vm可以访问到data中的数据和methods方法")
                console.log(this.sum + " " + this.add); //输出结果: 0 和 function () 
                
            },
            // Vue实列更新真实页面之前-----04生命周期探索: "1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效"
            beforeMount() {
                console.log("beforeMount===>1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效")
                // 操作Dom元素对按钮的文本信息进行更改
                document.getElementById("btn").innerText="吉士先生";
            },
            //Vue实列更新真实Dom(挂载完毕)----05生命周期探索:"1.页面呈现出经过Vue编译过的DOM.2.对DOM操作都有效"
            mounted() {
                console.log("1.页面呈现出经过Vue编译过的DOM.2.对DOM操作都有效");
                document.getElementById("btn").innerText="你好呀!Mounted";
                debugger;
            },
        });
    </script>
</body>

</html>

在这里插入图片描述

4.Vue生命周期_更新_销毁流程

(6).第六阶段: beforeUpdate() 只有更新数据的时候会调用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>当前页面的和为:{{sum}}</h2>
        <button @click="add" id="btn">点我+1</button>
    </div>
    <script type="text/javascript">
        // 修改Vue的全局配置
        Vue.config.productionTip = false;  // 关闭所处环境的提示。
        new Vue({
            el: "#root",
            data: {
                sum: 0,
            },
            methods: {
                add() {
                    this.sum += 1;
                }
            },
            // Vue实列初始前   ----------- 01生命周期探索: "无法通过vm访问data中的数据和methods方法。"
            beforeCreate() {
                console.log("beforeCreate===>无法通过vm访问data中的数据和methods方法");
                console.log(this.sum + " " + this.add); //输出结果: undefined,undefined,undefined,undefined
            },
            // Vue实列初始化完毕---------02生命周期探索:"vm可以访问到data中的数据和methods方法"
            created() {
                console.log("created====>vm可以访问到data中的数据和methods方法")
                console.log(this.sum + " " + this.add); //输出结果: 0 和 function () 
                
            },
            // Vue实列更新真实页面之前-----04生命周期探索: "1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效"
            beforeMount() {
                console.log("beforeMount===>1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效")
                // 操作Dom元素对按钮的文本信息进行更改
                document.getElementById("btn").innerText="吉士先生";
            },
            //Vue实列更新真实Dom(挂载完毕)----05生命周期探索:"1.页面呈现出经过Vue编译过的DOM.2.对DOM操作都有效"
            mounted() {
                console.log("mounted===>1.页面呈现出经过Vue编译过的DOM.2.对DOM操作都有效");
                document.getElementById("btn").innerText="你好呀!Mounted";
            },
            //Vue实列更新前-----06生命周期探索:"1.数据是新的,但是页面是旧的"
            beforeUpdate() {
                console.log("beforeUpdate===>1.数据是新的,但是页面是旧的");
                console.log(this.sum);
                debugger;
            },
        });
    </script>
</body>
</html>

在这里插入图片描述

(7).第七阶段:updated()

1.数据是新的,页面也是新的

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>当前页面的和为:{{sum}}</h2>
        <button @click="add" id="btn">点我+1</button>
    </div>
    <script type="text/javascript">
        // 修改Vue的全局配置
        Vue.config.productionTip = false;  // 关闭所处环境的提示。
        new Vue({
            el: "#root",
            data: {
                sum: 0,
            },
            methods: {
                add() {
                    this.sum += 1;
                }
            },
            // Vue实列初始前   ----------- 01生命周期探索: "无法通过vm访问data中的数据和methods方法。"
            beforeCreate() {
                console.log("beforeCreate===>无法通过vm访问data中的数据和methods方法");
                console.log(this.sum + " " + this.add); //输出结果: undefined,undefined,undefined,undefined
            },
            // Vue实列初始化完毕---------02生命周期探索:"vm可以访问到data中的数据和methods方法"
            created() {
                console.log("created====>vm可以访问到data中的数据和methods方法")
                console.log(this.sum + " " + this.add); //输出结果: 0 和 function () 
                
            },
            // Vue实列更新真实页面之前-----04生命周期探索: "1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效"
            beforeMount() {
                console.log("beforeMount===>1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效")
                // 操作Dom元素对按钮的文本信息进行更改
                document.getElementById("btn").innerText="吉士先生";
            },
            //Vue实列更新真实Dom(挂载完毕)----05生命周期探索:"1.页面呈现出经过Vue编译过的DOM.2.对DOM操作都有效"
            mounted() {
                console.log("mounted===>1.页面呈现出经过Vue编译过的DOM.2.对DOM操作都有效");
                document.getElementById("btn").innerText="你好呀!Mounted";
            },
            //Vue实列更新前-----06生命周期探索:"1.数据是新的,但是页面是旧的"
            beforeUpdate() {
                console.log("beforeUpdate===>1.数据是新的,但是页面是旧的");
                console.log(this.sum);
            },
            //Vue实列已经被更新----07生命周期探索:"1.数据是新的,页面也是新的"
            updated() {
                console.log("updated===>1.数据是新的,页面也是新的")
                console.log(this.sum);
                debugger;
            },
        });
    </script>
</body>
</html>

在这里插入图片描述

(8).第八阶段:销毁前beforeDestory()和销毁$destyored()

销毁之后:会丧失监听。页面不会再更新。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>当前页面的和为:{{sum}}</h2>
        <button @click="add" id="btn">点我+1</button>
        <button @click="death">点我销毁</button>
    </div>
    <script type="text/javascript">
        // 修改Vue的全局配置
        Vue.config.productionTip = false;  // 关闭所处环境的提示。
        new Vue({
            el: "#root",
            data: {
                sum: 0,
            },
            methods: {
                add() {
                    this.sum += 1;
                },
                death(){
                    //  对vm实列进行销毁。销毁之后vm依然存在,但是丧失了监听的功能。
                    this.$destroy();
                }
            },
            // Vue实列初始前   ----------- 01生命周期探索: "无法通过vm访问data中的数据和methods方法。"
            beforeCreate() {
                console.log("beforeCreate===>无法通过vm访问data中的数据和methods方法");
                console.log(this.sum + " " + this.add); //输出结果: undefined,undefined,undefined,undefined
            },
            // Vue实列初始化完毕---------02生命周期探索:"vm可以访问到data中的数据和methods方法"
            created() {
                console.log("created====>vm可以访问到data中的数据和methods方法")
                console.log(this.sum + " " + this.add); //输出结果: 0 和 function () 
                
            },
            // Vue实列更新真实页面之前-----04生命周期探索: "1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效"
            beforeMount() {
                console.log("beforeMount===>1.页面呈现的是未经Vue编译的Dom结构。2.所有对Dom的操作都不奏效")
                // 操作Dom元素对按钮的文本信息进行更改
                document.getElementById("btn").innerText="吉士先生";
            },
            //Vue实列更新真实Dom(挂载完毕)----05生命周期探索:"1.页面呈现出经过Vue编译过的DOM.2.对DOM操作都有效"
            mounted() {
                console.log("mounted===>1.页面呈现出经过Vue编译过的DOM.2.对DOM操作都有效");
                document.getElementById("btn").innerText="你好呀!Mounted";
            },
            //Vue实列更新前-----06生命周期探索:"1.数据是新的,但是页面是旧的"
            beforeUpdate() {
                console.log("beforeUpdate===>1.数据是新的,但是页面是旧的");
                console.log(this.sum);
            },
            //Vue实列已经被更新----07生命周期探索:"1.数据是新的,页面也是新的"
            updated() {
                console.log("updated===>1.数据是新的,页面也是新的")
                console.log(this.sum);
                debugger;
            },
            // Vue实列销毁前----08生命周期探索:"vm中的data,methods都可以用,2.主要用于关闭定时器的操作"
            beforeDestroy() {
                console.log("beforeDestroy===》vm中的data,methods都可以用,2.主要用于关闭定时器的操作")
                console.log(this.add);
                console.log(this.sum);
            },
        });
    </script>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15_FreeRtos计数信号量优先级翻转互斥信号量

目录 计数型信号量 计数型信号量相关API函数 计数型信号量实验源码 优先级翻转简介 优先级翻转实验源码 互斥信号量 互斥信号量相关API函数 互斥信号量实验源码 计数型信号量 计数型信号量相当于队列长度大于1的队列&#xff0c;因此计数型信号量能够容纳多个资源,这在…

家庭理财,轻松记账修改收支记录这样操作

我们在记账的时候难免会出现记错或者想修改的地方&#xff0c;又或者是想将之前太久没有用的记账记录删除掉&#xff0c;今天&#xff0c;小编就教大家如何修改收支记录&#xff0c;一起接着往下看吧&#xff01; 第一步&#xff0c;运行【晨曦记账本】在软件主界面中&#xff…

分享111个HTML娱乐休闲模板,总有一款适合您

分享111个HTML娱乐休闲模板&#xff0c;总有一款适合您 111个HTML娱乐休闲模板下载链接&#xff1a;https://pan.baidu.com/s/1mqmJLctj9oQbJt6Oo8IuBA?pwdep3t 提取码&#xff1a;ep3t Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 响应式美容养生服务行业…

Yolo系列之YOLOv1 YOLOv2

一、YOLOv1 1. YOLOv1概述 YOLOv1是单阶段目标检测方法,不需要像Faster RCNN这种两阶段目标检测方法一样,需要生成先验框。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测。虽然Faster-RCNN在当时是mAP最高的算法(2015-2016年), 然而速度却很慢,相对而言,Yol…

Java智慧校园平台源码:SaaS模式智慧校园运营云平台源码

校班务管理&#xff1a;评价管理&#xff1a; 1.web端/教师端小程序编辑点评 多元化评价&#xff0c;捕捉学生闪光点全方位评价&#xff0c;自定义评价类型、 评价信息实时推送至家长、AI智能点评 班级报表一键导出&#xff0c;智能评测学生在校表现&#xff0c;老师、家长实…

算法的时间复杂度

算法在编写成可执行程序后&#xff0c;运行时需要消耗时间资源和空间&#xff08;内存&#xff09;资源&#xff0c;因此衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的。 时间复杂度主要衡量一个算法运行的快慢&#xff0c;而空间复杂度主要衡量一个算法运…

Qt Desginer布局方法

首先将我们需要的控件拖拽到一个合适的位置&#xff0c;该例子中用到了两个label&#xff0c;两个lineEdit和两个pushButton。 然后我们需要利用弹簧来控制控件到控件之间的距离以及控件到窗体边界的距离&#xff0c;因为这里只有一组控件&#xff08;两个label&#xff0c;两个…

学板绘课程学费一般多少钱

学板绘课程学费一般多少钱&#xff1f;培训机构的费用和师资、模式有关&#xff0c;价格贵不贵要结合相同类型的机构多多对比。因为好些平台做了很多的宣传广告&#xff0c;运营成本很高&#xff0c; 终羊毛出在羊身上&#xff0c;这样的机构知名度很高&#xff0c;但是性价比不…

untiy 录制网络摄像头视频并保存到本地文件

网络摄像头使用的是海康威视的&#xff0c;关于如何使用Ump插件播放海康威视rtsp视频流&#xff0c;请参考我的这篇文章 内部有ump插件的下载链接 untiy接入 海康威视网络摄像头 录屏使用的插件是 AVPro movieCapture 4.6.3版&#xff0c; 插件和完整工程的下载链接放在本文的…

eclipse创建第一个java web项目并运行

为了能编写java web项目&#xff0c;建议安装支持javaee开发的eclipse版本。1.下载eclipse地址&#xff1a;https://www.eclipse.org/downloads/packages/release/2021-03/r2.解压后启动eclipse3.新建java web工程设置项目名称&#xff0c;指定tomcat的版本及路径4. 添加一个js…

Python快速入门系列之一:Python对象

Python对象1. 列表&#xff08;list&#xff09;2. 元组&#xff08;tuple&#xff09;3. 字典&#xff08;dict&#xff09;4. 集合&#xff08;set&#xff09;5. 字符串&#xff08;string&#xff09;6. BIF &#xff08;Built-in Function&#xff09;7. 列表、集合以及字…

小笔记:gitlab配置文件 /etc/gitlab/gitlab.rb 配置项

小笔记&#xff1a;gitlab配置文件 /etc/gitlab/gitlab.rb 配置项CSDN账号 jcLee95 &#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/12…

0.3调试opencv源码的两种方式

调试opencv源码的两种方式 上两篇我们分别讲了如何配置opencv环境&#xff0c;以及如何编译opencv源码方便我们阅读。但我们还是无法调试我们的代码&#xff0c;无法以我们的程序作为入口来一步一步单点调试看opencv是如何执行的。 【opencv源码解析0.1】VS如何优雅的配置ope…

Python学习-----模块1.0(模块的简介、定义与使用)

目录 前言&#xff1a; 1.什么是模块 2.模块的分类 &#xff08;1&#xff09;内置模块 &#xff08;2&#xff09;第三方模块 &#xff08;3&#xff09;自定义模块 3.模块的使用 4.自定义模块 5.模块和执行文件的判断 前言&#xff1a; 今天就开始讲Python中的模块篇…

第07章_单行函数

第07章_单行函数 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. 函数的理解 1.1 什么是函数 函数在计算机语言的使用中贯穿始终&#xff0c;函数的作用是什么呢&#xff1f;它可以把我们经…

netty心跳

为什么要引入心跳机制&#xff1a;因为网络连接是不可靠的&#xff0c;像在TCP长连接或者webSocket长连接时都会使用心跳机制&#xff0c;即发送特殊的数据包告诉自己的业务没办完&#xff0c;不要关闭连接。案例要求&#xff1a;当服务器超过3秒没有读时&#xff0c;就提示读空…

二维数组中的查找(两种解法,各有千秋)

凡事都有可能&#xff0c;永远别说永远。——《放牛班的春天》今天一题为再一个行列都有序的二维数组中寻找一个目标值&#xff0c;我们第一时间想到的可能是很暴力的解法&#xff0c;例如从头到尾进行遍历&#xff0c;这样能做出来&#xff0c;但是借用武忠祥老师的一句话&…

15-基础加强-1-类加载器反射

文章目录1.类加载器1.1类加载器【理解】1.2类加载的过程【理解】1.3类加载的分类【理解】1.4双亲委派模型【理解】1.5ClassLoader 中的两个方法【应用】2.反射2.1反射的概述【理解】2.2获取Class类对象的三种方式【应用】 第1步&#xff1a;获取类的Class对象2.3反射获取构造方…

【FiddlerScript】利用Fiddler中的FiddlerScript解除4399小游戏的防沉迷

本文仅供技术探讨&#xff0c;切勿用于非法用途案例网站:小游戏,4399小游戏,小游戏大全,双人小游戏大全 - www.4399.com准备的工具:配置好的Fiddler一个Fiddler官方英文版配置教程:https://www.bilibili.com/video/BV1rP4y1t7ZLFiddler中文版配重教程:https://www.bilibili.com…

懒加载以及预加载相关概念

⼆、懒加载 1. 懒加载的概念 懒加载也叫做延迟加载、按需加载&#xff0c;指的是在⻓⽹⻚中延迟加载图⽚数据&#xff0c;是⼀种较好的⽹⻚性能优化 的⽅式。 在⽐较⻓的⽹⻚或应⽤中&#xff0c;如果图⽚很多&#xff0c;所有的图⽚都被加载出来&#xff0c;⽽⽤户只能看到…