1.监视属性
基本监视
watch:
- 当被监视的属性变化时,回调函数自动调用,进行相关操作。
- 监视的属性必须存在,才能进行监视!!
- 监视的两种写法:
- new Vue时传入watch配置
- 通过vm.$watch监视
<script> new Vue({ el: '#root', data() { return { isHot: true } }, watch: { isHot: { handler(newValue, oldValue) { console.log('值发生改变了'); console.log(newValue, oldValue); } } } }); </script>
深度监视
- Vue中的watch默认不监测对象内部值的改变(一层)。
- 在配置deep: true可以监测对象内部值改变(多层)。
备注:
- Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!
- 使用watch时根据数据的具体结构,决定是否采用深度监视。
<script> new Vue({ el: '#root', data() { return { user: { name: '', age: null } } }, watch: { user: { deep: true, handler(newValue, oldValue) { console.log('值发生改变了'); console.log(newValue, oldValue); } } } }); </script>
简写方式
当只需要配置handler函数的时候可以采用简写的方式。(类似于计算属性的简写方式)
<script> new Vue({ el: '#root', data() { return { user: { name: '', age: null } } }, watch: { user(newValue, oldValue) { console.log('值发生改变了'); console.log(newValue, oldValue); } } }); </script>
2. 绑定样式
class绑定
- 字符串写法。适用于:样式的类名不确定,需要动态指定。
<body> <div id="root"> <div @click="changeMood" class="basic" :class="mood"></div> </div> </body> <script> new Vue({ el: '#root', data() { return { mood: 'normal' } }, methods: { //字符串方式更改样式 changeMood() { this.mood = 'sad'; } }, }) </script>
- 数组写法。适用于:要绑定的样式个数不确定,名字也不确定。
<body> <div id="root"> <div @click="changeMood2" class="basic" :class="moodArr"></div> </div> </body> <script> new Vue({ el: '#root', data() { return { moodArr: ['normal', 'sad', 'happy'] } }, methods: { //字符串方式更改样式 changeMood2() { this.moodArr = ['sad']; } }, }) </script>
- 对象写法。适用于:要绑定的样式个数确定、名字也确定。但要动态决定用不用。
<body> <div id="root"> <div @click="changeMood3" class="basic" :class="moodObj"></div> </div> </body> <script> new Vue({ el: '#root', data() { return { moodObj: { normal: true, sad: false, happy: true } } }, methods: { //字符串方式更改样式 changeMood3() { this.moodObj.happy = false; } }, }) </script>
style绑定
- 对象方式绑定。
<body> <div id="root"> <div @click="changeMood3" :style="styleObj" :class="moodObj"></div> </div> </body> <script> new Vue({ el: '#root', data() { return { styleObj: { color: 'red' }, styleArr: [{ fontSize: '40px', color: 'red' }, { backgroundColor: 'red' }] } }, methods: { }, }) </script>
- 数组方式绑定。
<body> <div id="root"> <div @click="changeMood3" :style="styleArr" :class="moodObj"></div> </div> </body> <script> new Vue({ el: '#root', data() { return { styleArr: [{ fontSize: '40px', color: 'red' }, { backgroundColor: 'red' }] } }, methods: { } }) </script>