Vue
-
-
备注:
一、监听 1. const vm = new Vue({ el: "#app", watch:{ immediate: true, // 初始化时让handler调用一下 deep: true, // 深度监听 handler(newValue, oldValue){ console.log(newValue, oldValue) } } }) 2. vm.$watch('isSHow',{ immediate: true, // 初始化时让handler调用一下 deep: true, // 深度监听 handler(newValue, oldValue){ console.log(newValue, oldValue) } }) 二、简写 1. const vm = new Vue({ el: "#app", watch:{ isShow(newValue, oldValue){ console.log(newValue, oldValue) } } }) 2. vm.$watch('isSHow', function(newValue, oldValue){ console.log(newValue, oldValue) })
-
计算属性(computed)、方法methods、监听(watch)的区别?
computed、watch、methods专人干专事 -
- class样式 写法: :class = “xxx”, xxx可以是字符串、对象、数组
- style样式
:style = "{fontSize: xxx}" 其中xx是动态的 :style = "[a, b]" 其中a, b是样式对象
示例:
<!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="./vue.js"></script> <style> /* #region */ .red{ color: red; } .blue{ color: blue; } .green{ color: green } .yellow{ color: yellow } /* #endregion */ .bold{ font-weight: bold; } .size{ font-size: larger; } </style> </head> <body> <div id="app"> <!-- 1. 绑定字符串 --> <!-- 1.1.1 固定切换class名称 --> <p :class="name">这是一个动态class</p> <button @click="changClass">点击单次切换class名</button> <br> <!-- 1.1.2 随机切换class名称 --> <!-- class 和:class 可以绑定多个class名称 --> <p class="bold" :class="name">这是一个动态class</p> <button @click="changClass2">点击数组切换class名</button> <br> <!-- 1.1.3 三元表达式表达式切换class名称 --> <p :class="isName ? 'red' : 'blue'">这是一个动态class</p> <button @click="isName = !isName">表达式切换class名</button> <hr> <!-- 2. 绑定对象 --> <!-- <p :class="{bold: true, size: false}">这是一个对象绑定的class类名</p> --> <p :class="objClass">这是一个对象绑定的class类名</p> <button @click="objClassChange">表达式切换class名</button> <hr> <!-- 3. 绑定数组 --> <!-- <p :class="['blue', 'bold', 'size']">这是一个对象绑定的class类名</p> --> <p :class="arrClass">这是一个对象绑定的class类名</p> <button @click="arrClassChange">表达式切换class名</button> </div> <script> const vm = new Vue({ el: '#app', data: { name: 'red', isName: true, arr:['red', 'blue', 'green'], // 对象class名称 objClass:{ red: true, bold: true }, // 数组class名称 arrClass:[ 'blue', 'bold', 'size'] }, methods: { // #region 字符串绑定 changClass(){ this.name = 'blue' }, changClass2(){ const a = Math.floor(Math.random() * 3) console.log(this.arr[a]); this.name = this.arr[a] }, // #endregion objClassChange(){ // this.objClass.size = true // 解决方法 $set方法 // this.$set(this.objClass, 'size', true) Vue.set(this.objClass, 'size', true) }, arrClassChange(){ // this.arrClass.splice(0, 1, 'yellow') // 存在问题?为何vm中的arrClass值改变了,页面却没有渲染 => Vue内部监视原理 // this.arrClass[0] = 'yellow' // 解决方法 // this.$set(this.arrClass, 0, 'yellow') this.$set(this.arrClass, 0, 'yellow') } }, }) </script> </body> </html>
-
-
如何监视对象的数据? 通过setter实现监视,且要在new Vue时就传入要监测的内容
Vue.set(target, propertyName/index, value) vm.$set(target, propertyName/index, value)
-
Vue.set()
或者vm.$set()
特别注意:Vue.set()和vm.$set()不能给vm或者vm的根数据对象添加属性!!
示例:<!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="./vue.js"></script> </head> <body> <div id="app"> {{ obj }} <button @click="changeObj">点击改变obj值</button> <hr> {{ arr }} <button @click="changeArr">点击改变arr值</button> <hr> {{ arr2 }} <span v-once>{{ arr2 }}</span> <button @click="changeArr2">点击改变arr顺序sort方法</button> <hr> {{ arr3 }} <button @click="changeArr3">点击翻转arr</button> </div> <script> const vm = new Vue({ el: '#app', data:{ obj:{ name: '小明' }, arr:['小亮', 10], arr2:[ 10, 40, 5, 30], arr3:[ 1, 2, 3, 4] }, methods: { changeObj(){ // this.obj.banji = 'xx班级' // 解决方法 // this.$set(this.obj, 'banji', 'xx班级') Vue.set(this.obj, 'banji', 'xx班级') }, changeArr(){ // this.arr[0] = '小白' // 解决方法一: set // this.$set(this.arr, 2, 'xx班级') // Vue.set(this.arr, 2, 'xx班级') // this.arr[2] = '小白' // 解决方法二:内置函数 // 1. 数组后添加值 // this.arr.push('小白') // 2. 数组后删除值 // this.arr.pop() // 3. 从头往后删除数组 // this.arr.shift() // 4. 数组前面加值 // this.arr.unshift('小小') }, // 数组排序 changeArr2(){ // 5. sort() // 正序 this.arr2.sort((a,b) =>{ console.log('--'); console.log(a, b); return a-b }) // this.arr2.sort((a,b) =>{ // return b - a // }) }, // 翻转数组 changeArr3(){ // this.arr3.reverse() // this.arr3.splice(1, 2, 'a', 'b', 'v') // 注意: 禁止给vm或者vm的跟数据对象添加属性 // console.log(vm._data) // this.$set(vm._data, 'name', 'ssss') // this.$set(vm, 'name', 'ssss') } }, }) </script> </body> </html>
原文地址:https://blog.csdn.net/qq_35940731/article/details/134750970
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_46692.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。