发表于: 2023-05-12 20:44:34

0 113


  




vue知识点:


<!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>列表排序</title>
  <script type="text/javascript" src="../vue_basic/vue.js"></script>
</head>

<body>
  <div id="root">
    <!-- 遍历数组 -->
    <h2>人员列表</h2>
    <input type="text" placeholder="请输入名字" v-model="keyWord">
    <button @click="sortType = 2">年龄升序</button>
    <button @click="sortType = 1">年龄降序</button>
    <button @click="sortType = 0">原顺序</button>
    <ul>
      <li v-for="p in filPersons" :key="p.id">
        {{p.name}}-{{p.age}}-{{p.sex}}
        <input type="text">
      </li>
    </ul>

  </div>

  <script type="text/javascript">
    Vue.config.productionTip = false;

    new Vue({
      el: '#root',
      data: {
        keyWord:'',
        sortType:0,//0是原顺序,1降序,2升序
        persons: [
          { id: 001, name: '马冬梅', age: 29,sex:'女' },
          { id: 002, name: '周冬雨', age: 25,sex:'女' },
          { id: 003, name: '周杰伦', age: 18,sex:'男' },
          { id: 004, name: '温兆伦', age: 31,sex:'男' }
        ]
      },
      computed:{
        filPersons(){
            const arr =  this.persons.filter((p)=>{
                return p.name.indexOf(this.keyWord) !== -1
            })
            //判断一下是否需要排序
            if(this.sortType){
                arr.sort((p1,p2)=>{
                    return this.sortType === 1 ? p2.age-p1.age : p1.age-p2.age
                })
            }
            return arr
        }
      }
    })


  </script>
</body>

</html>


<!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>更新时的一个问题</title>
  <script type="text/javascript" src="../vue_basic/vue.js"></script>
</head>

<body>
  <div id="root">

    <h2>人员列表</h2>
    <button @click="updateMei">点击改变信息</button>
    <ul>
      <li v-for="p in persons" :key="p.id">
        {{p.name}}-{{p.age}}-{{p.sex}}
      </li>
    </ul>

  </div>

  <script type="text/javascript">
    Vue.config.productionTip = false;

    new Vue({
      el: '#root',
      data: {
        persons: [
          { id: 001, name: '马冬梅', age: 29,sex:'女' },
          { id: 002, name: '周冬雨', age: 25,sex:'女' },
          { id: 003, name: '周杰伦', age: 18,sex:'男' },
          { id: 004, name: '温兆伦', age: 31,sex:'男' }
        ]
      },
      methods: {
        updateMei(){
            // this.persons[0].name = '马老师' //奏效
            // this.persons[0].age = 58 //奏效
            // this.persons[0].sex = '男' //奏效
            // this.persons[0] = { id: 001, name: '马老师', age: 58,sex:'男' } //不奏效
            this.persons.splice(0,1,{ id: 001, name: '马老师', age: 58,sex:'男' })
        }
      },
    })


  </script>
</body>

</html>


<!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>Vue检测数据改变的原理_对象</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
  </head>
  <body>
    <div id="root">
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
            name:'修真院',
            address:'成都',
            student:{
              name:'tom',
              age:{
                rAge:40,
                sAge:29,
              },
              friends:[
                {name:'jerry',age:35}
              ]
            }
        },
      });
</script>
  </body>
</html>


<!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>模拟一个数据监测</title>
  </head>
  <body>
    <div id="root"></div>
    <script>

        let data = {
            name:'修真院',
            address:'成都'
        }

        //创建一个监视的实力对象 ,用于监视data中属性的变化
        const obs = new Observer(data)
        console.log(obs);

        //准备一个vm实例对象
        let vm = {}
        vm._data = data = obs

        function Observer(obj) {
            //汇总对象中所有的属性形成一个数组
            const keys = Object.keys(obj)
            //遍历
            keys.forEach((k)=>{
                //Object.defineProperty() 方法会直接在一个对象上定义一个新属性,
                //或者修改一个对象的现有属性,并返回此对象。
                Object.defineProperty(this,k,{
                    get(){
                        return obj[k]
                    },
                    set(val){
                        console.log(`${k}被改了,我要去解析模板,生成虚拟DOM....我要开始忙了`);
                        obj[k] = val
                    }
                })
            })
           
        }
</script>
  </body>
</html>


<!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>Vue.set的使用</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
  </head>
  <body>
    <div id="root">
        <h1>学校信息</h1>
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
    </hr>
        <h1>学生信息</h1>
        <button @click="addSex">添加性别</button>
        <h2>姓名:{{student.name}}</h2>
        <h2 v-if="student.sex">性别:{{student.sex}}</h2>
        <h2>年龄:真实{{student.age.rAge}} 对外:{{student.age.sAge}}</h2>
        <h2>朋友们</h2>
        <ul>
            <li v-for="f in student.friends" :key="index">
                {{f.name}} -- {{f.age}}
            </li>
        </ul>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
            name:'修真院',
            address:'成都',
            student:{
              name:'tom',
            //   sex:'男',
              age:{
                rAge:40,
                sAge:29,
              },
              friends:[
                {name:'jerry',age:35},
                {name:'tony',age:36},
              ]
            }
        },
        methods: {
            addSex(){
                Vue.set(this.student,'sex','男')
            }
        },
      });
</script>
  </body>
</html>


<!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>Vue监测数据改变的原理_数组</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
  </head>
  <body>
    <div id="root">
        <h1>学校信息</h1>
        <h2>学校名称:{{school.name}}</h2>
        <h2>学校地址:{{school.address}}</h2>
    </hr>
        <h1>学生信息</h1>
        <button @click="addSex">添加性别</button>
        <h2>姓名:{{student.name}}</h2>
        <h2 v-if="student.sex">性别:{{student.sex}}</h2>
        <h2>年龄:真实{{student.age.rAge}} 对外:{{student.age.sAge}}</h2>
        <h2>爱好</h2>
        <ul>
            <li v-for="h in student.hobby" :key="index">
                {{h}}
            </li>
        </ul>
        <h2>朋友们</h2>
        <ul>
            <li v-for="f in student.friends" :key="index">
                {{f.name}} -- {{f.age}}
            </li>
        </ul>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
            school:{
                name:'修真院',
                address:'成都'
            },
            student:{
              name:'tom',
            //   sex:'男',
              age:{
                rAge:40,
                sAge:29,
              },
              hobby:['听音乐','打游戏'],
              friends:[
                {name:'jerry',age:35},
                {name:'tony',age:36},
              ]
            }
        },
        methods: {
            addSex(){
                Vue.set(this.student,'sex','男')
            }
        },
      });
</script>
  </body>
</html>




<!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>总结Vue数据检测</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
  </head>
  <body>
    <div id="root">

<!--
        Vue监视数据的原理:
            1。vue会监视data中所有层次的数据
            2。如何监测对象中的数据?
        通过setter实现监视,且要在new Vue时就传入要监测的数据。
            (1).对象中后追加的属性,Vue默认不做响应式处理
            (2).如需给后添加的属性做响应式,请使用如下
            API:Vue.set(target,propertyName/index, value) 或
            vm.$set(target, propertyName/index,value)
        3。如何监测数组中的数据?通过包裹数组更新元素的方法实现,本质就是做了两件事:
            (1).调用原生对应的方法对数组进行更新。
            (2).重新解析模板,进而更新页面。
        4。在Vue修改数组中的某个元素一定要用如下方法:
            1.使用这些API:push()、pop()、shift()、unshift()、splice()、sort()、reverse()
            2.Vue.set() 或 vm.$set()

        特别注意:Vue.set() 和 vm.$set() 不能给vm 或 vm的根数据对象 添加属性!!!    
 -->


        <h1>学生信息</h1>

        <button @click="student.age++">年龄+1</button><br/>
        <button @click="addSex">添加性别属性,默认值:男</button><br/>
        <button @click="student.sex = `未知`">修改性别</button><br/>
        <button @click="addFriend">在列表首位添加一个朋友</button><br/>
        <button @click="updateFrisFriendName">修改第一个朋友的名字为:张三</button><br/>
        <button @click="addHobby">添加一个爱好</button><br/>
        <button @click="updateHobby">修改第一个爱好为开车</button><br/>

        <h2>姓名:{{student.name}}</h2>
        <h2>年龄:{{student.age}}</h2>
        <h2 v-if="student.sex">性别:{{student.sex}}</h2>

        <h2>爱好</h2>
        <ul>
            <li v-for="h in student.hobby" :key="index">
                {{h}}
            </li>
        </ul>
        <h2>朋友们</h2>
        <ul>
            <li v-for="f in student.friends" :key="index">
                {{f.name}} -- {{f.age}}
            </li>
        </ul>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
            student:{
              name:'tom',
            //   sex:'男',
              age:"18",
              hobby:['听音乐','打游戏'],
              friends:[
                {name:'jerry',age:35},
                {name:'tony',age:36},
              ]
            }
        },
        methods: {
            addSex(){
                Vue.set(this.student,'sex','男')
            },
            addFriend(){
                this.student.friends.unshift({name:'jack',age:50})
            },
            updateFrisFriendName(){
                this.student.friends[0].name = '张三'
                // this.student.friends[0].age = '40'  
            },
            addHobby(){
                this.student.hobby.push('唱歌')
            },
            updateHobby(){
                this.student.hobby.splice(0,1,'开车')
                // Vue.set(this.student.hobby,0,'开车')
            }
        },
      });
</script>
  </body>
</html>



返回列表 返回列表
评论

    分享到