vue2 part2

[复制链接]
发表于 2026-2-3 05:41:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
数据署理

通过defineProperty内里传入obj2和x,然后get和set下读取吸收下然后再吸收set中给对象x用value吸收下,如许就能两个数据读取和吸收了
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="UTF-8" />
  5.     <title>何为数据代理</title>
  6. </head>
  7. <body>
  8.     <!--数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)-->
  9.     <script type="text/javascript">
  10.         let obj = { x: 100 }
  11.         let obj2 = { y: 200 }
  12.         Object.defineProperty(obj2, 'x', {
  13.             get() {
  14.                 return obj.x
  15.             },
  16.             set(value) {
  17.                 obj.x = value
  18.             }
  19.         })
  20.     </script>
  21. </body>
  22. </html>
复制代码
雷同指针
控制台输出vm,你的name和address是get和set署理的

 new的vue是一个全局对象,无法在控制台变革,error:data.name失败
vm的data现实存在_data中,但是要额外界说data,导入到new vue中,控制台判定是否===,true
_data相当于另一个新对象,然后内里的值和原始的data数据一样。
  1. 控制台vm._data.name='atguigu'
  2. vm.name原来是尚硅谷
  3. vm.name显示"atguigu"
复制代码

控制台的_data是address,name等是数据挟制
变乱处置处罚

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="UTF-8" />
  5.     tle>事件的基本使用</title>
  6.     <!--引入Vue -->
  7.     <script type="text/javascript" src="../js/vue.js"></script>
  8. </head>
  9. <body>
  10.     <!--
  11. 事件的基本使用:
  12. 1.使用v-on:xxx或@xxx绑定事件,其中xxx是事件名;
  13. 2.事件的回调需要配置在methods对象中,最终会在vm上;
  14. 3.methods中配置的函数,不要用箭头函数!否则this就不是vm了;
  15. 4.methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或组件实例对象
  16. 5.@click="demo”和 @click="demo($event)”效果一致,但后者可以传参;
  17. -->
  18.     <!--准备好一个容器-->
  19.     <div id="root">
  20.         <h2>欢迎来到{{name}}学习</h2>
  21.         <!-- <button v-on:click="showInfo">点我提示信息</button> -->
  22.         <button@click="showInfo1">点我提示信息1(不传参)</button>
  23.             <button@click="showInfo2($event,66)">点我提示信息2(传参)</button><!--传参加小括号,同时showInfo失去了event -->
  24.     </div>
  25. </body>
  26. <script type="text/javascript">
  27.     Vue.config.productionTip = false//阻止vue在启动时生成生产提示。
  28.     const vm = new Vue({
  29.         el: '#root',
  30.         data: {
  31.             name: '尚硅谷',
  32.             showInfo2(event, number) {
  33.                 console.log(event, number)
  34.                 // console.log(event.target.innerText)
  35.                 // console.log(this)//此处的this是vm
  36.                 alert('同学你好!!')
  37.             }
  38.         },
  39.         methods: {
  40.             showInfo1(event) {
  41.                 // console.log(event.target.innerText)
  42.                 // console.log(this)//此处的this是vm
  43.                 alert('欢迎来到尚硅谷学习!')
  44.             },
  45.             showInfo2(event, number) {
  46.                 console.log(event, number)
  47.                 // console.log(event.target.innerText)              
  48.                 // console.log(this)//此处的this是vm
  49.                 alert('同学你好!!')
  50.             }
  51.         }
  52.     })
  53. </script>
  54. </htm1>
复制代码
太多东西,本身看p14吧
变乱修饰符

以是实行序次是:触发举动->回调->默认举动?
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="UTF-8" />
  5.     tle>事件的基本使用</title>
  6.     <!--引入Vue -->
  7.     <script type="text/javascript" src="../js/vue.js"></script>
  8.     <style>
  9.         * {
  10.             margin-top: 20px;
  11.         }
  12.         .demo1 {
  13.             color: red;
  14.             height: 50px;
  15.         }
  16.         .box1 {
  17.             padding: 50px;
  18.             background-color: skyblue;
  19.         }
  20.         .box2 {
  21.             padding: 20px;
  22.             background-color: pink;
  23.         }
  24.     </style>
  25. </head>
  26. <body>
  27.     <!--
  28.     vue的事件修饰符
  29.     1. .prevent 阻止默认事件   
  30.     2. .stop 阻止事件冒泡
  31.     3. .once 只触发一次
  32.     4. .capture 使用事件的捕获模式
  33.     5. .self 只有event.target是当前操作元素自身时触发事件
  34.     6. .passive 事件的默认行为立即执行,不会等待事件回调函数执行完毕。
  35.     -->
  36.     <!--准备好一个容器-->
  37.     <div id="root">
  38.         <!-- 阻止默认事件 -->
  39.         <h2>欢迎来到{{name}}学习</h2>
  40.         <a href="https://www.atguigu.com" @click="showInfo">点我提示信息</a>
  41.         <!-- 阻止事件冒泡 -->
  42.         <div class="demo1" @click.stop="showInfo">
  43.             <button @click.stop="showInfo">点我</button>
  44.             <!-- 事件冒泡:即多个组件嵌套,触发内层组件时,会一一触发外层事件 -->
  45.         </div>
  46.         <!-- 事件只触发一次 -->
  47.         <button @click.once="showInfo">点我</button>
  48.         <!-- 使用事件的捕获模式: 捕获是由外往内,冒泡相反-->
  49.         <div class="box1" @click.capture="showMsg(1)">
  50.             div1
  51.             <div class="box2" @click.capture="showMsg(2)">
  52.                 div2
  53.             </div>
  54.         </div>
  55.     </div>
  56. </body>
  57. <script type="text/javascript">
  58.     Vue.config.productionTip = false//阻止vue在启动时生成生产提示。
  59.     new Vue({
  60.         el: '#root',
  61.         data: {
  62.             name: '尚硅谷'
  63.         },
  64.         methods: {
  65.             showInfo(e) {//这里写showInfo(e) e.preventDefault()阻止默认事件,可以防止页面跳转
  66.                 alert('同学你好')
  67.                 comsole.log(e.target)
  68.             },
  69.             showMsg(num) {
  70.                 console.log('div' + num + '被点击了')
  71.             }
  72.         }
  73.     })
  74. </script>
  75. </htm1>
复制代码
键盘变乱

016_尚硅谷Vue技能_键盘变乱_哔哩哔哩_bilibili
总结

修饰符可以连续写,正常逻辑,先写的先运行
@keyup.ctrl.y就可以ctrl+y
姓名案例-差值语法实现

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="UTF-8" />
  5.     <title>姓名案例_插值语法实现</title>
  6.     <!-- 引入Vue -->
  7.     <script type="text/javascript" src="../js/vue.js"></script>
  8. </head>
  9. <body>
  10.     <!--准备好一个容器-->
  11.     <div id="root">
  12.         姓:<input type="text" v-model="firstName"> <br /><br />
  13.         名:<input type="text" v-model="lastName"><br /><br />
  14.         全名:<span>{{firstName.slice(0,3)}} - {{lastName}}</span><!-- firstname只要3位 -->
  15.         全名:<span>{{fullName()}}</span>
  16.     </div>
  17. </body>
  18. <script type="text/javascript">
  19.     Vue.config.productionTip = false//阻止vue在启动时生成生产提示。
  20.     new Vue({
  21.         el: '#root',
  22.         data: {
  23.             firstName: '张',
  24.             lastName: '三'
  25.         },
  26.         methods: {
  27.             fullName() {
  28.                 return this.firstName.slice(0, 3) + '-' + this.lastName //这里的this是vue实例,所以可以直接调用data里面的属性和方法。
  29.             }//数据发生变化,模板重新解析
  30.         },
  31.     })
  32. </script>
  33. </html>
复制代码
盘算属性

盘算属性界说:拿着已经写好的属性,用这些属性盘算出来一个属性,称为盘算属性,data内里放的是属性  ,而盘算属性必要放到一个单独的聚团体中
019_尚硅谷Vue技能_盘算属性_哔哩哔哩_bilibili很好的视频,清清楚楚显着白白
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="UTF-8" />
  5.     <title>姓名案例_插值语法实现</title>
  6.     <!-- 引入Vue -->
  7.     <script type="text/javascript" src="../js/vue.js"></script>
  8. </head>
  9. <body>
  10.     <!--准备好一个容器-->
  11.     <div id="root">
  12.         姓:<input type="text" v-model="firstName"> <br /><br />
  13.         名:<input type="text" v-model="lastName"><br /><br />
  14.         全名:<span>{{firstName.slice(0,3)}} - {{lastName}}</span><!-- firstname只要3位 -->
  15.         全名:<span>???</span>
  16.     </div>
  17. </body>
  18. <script type="text/javascript">
  19.     Vue.config.productionTip = false//阻止vue在启动时生成生产提示。
  20.     new Vue({
  21.         el: '#root',
  22.         data: {
  23.             firstName: '张',
  24.             lastName: '三'
  25.             x: 'hello'
  26.         },
  27.         //相当于computed中的每个对象默认提供getter和setter,我们只是重写了getter
  28.         computed: {
  29.             fullName: {
  30.                 //get有什么作用?当有人读取fullname,get就会被调用,返回值是fullname的值
  31.                 //get什么时候被调用?1.当fullname的值被读取时,get就会被调用2.依赖的数据发生变化时,get也会被调用
  32.                 get() {//get的this指向vm
  33.                     console.log('get调用了')
  34.                     return this.firstname + '-' + this.lastName
  35.                 },//在控制台查找vm._data的firstname,lastname都能找到,但是fullname是underfined,compute已经给了vm
  36.                 set(value) {
  37.                     console.log('set', value)
  38.                     const arr = value.split('-')
  39.                     this.firstName = arr[0]
  40.                     this.lastName = arr[1]
  41.                 }
  42.             }
  43.         },
  44.     })
  45. </script>
  46. </html>
复制代码
盘算属性:
1.界说:要用的属性不存在,要通过已有属性盘算得来。
2.原理:底层借助了Objcet.defineproperty方法提供的getter和setter。
3.get函数什么时间实行?
(1).初次读取时会实行一次。
(2).当依赖的数据发生改变时会被再次调用。
4.上风:与methods实现相比,内部有缓存机制(复用),服从更高,调试方便。
5.备注:
1.盘算属性终极会出如今vm上,直接读取利用即可。
2.假如盘算属性要被修改,那必须写set函数去相应修改,且set中要引起盘算时依赖的数据发生
盘算属性-简写

  1. get() {//get的this指向vm
  2.                     console.log('get调用了')
  3.                     return this.firstname + '-' + this.lastName
  4.                 },//在控制台查找vm._data的firstname,lastname都能找到,但是fullname是underfined,compute已经给了vm
  5. fullName:function(){
  6.     console.log('get调用')
  7.     return this.firstName+'-'+this.lastname
  8. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表