赞
踩
# 1 计算属性是基于它们的依赖进行缓存的
# 2 计算属性只有在它的相关依赖发生改变时才会重新求值
# 3 计算属性就像Python中的property,可以把方法/函数伪装成属性
# 计算属性本质上是一个函数,它们可以通过 get 和 set 方法对属性进行操作。
# 4 写在computed中,必须返回值--》返回值才是属性
-以后把他当属性用
-被for循环
个人的理解就是
vue
中的计算属性的好处就是我比如在设置了一个input
标签里写了计算属性之后 别的组件发生改变我的input
标签也不会发生改变<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://unpkg.com/vue@2.6.14/dist/vue.js"></script> </head> <body> <div id="app"> <input type="text" v-model="name">--》》{{ newName }} <hr> <input type="text" v-model="name1">---》{{ name1 }} </div> </body> <script> var vm = new Vue({ el: '#app', data: { name: '', name1: '' }, methods: { // 普通函数形式 handleToUpper() { console.log('函数我执行了') return this.name.substring(0, 1).toUpperCase() + this.name.substring(1) } }, computed:{ // 将 handleToUpper() 方法改写为计算属性 newName(){ console.log('计算属性我执行了') return this.name.substring(0, 1).toUpperCase() + this.name.substring(1) } } }) </script> </html>
# 1 监听住一个属性,只要这个属性发生变化,就执行函数
name
属性被监听,当它的值发生变化时,会触发相应的处理函数。
在Vue.js中,监听属性(Watchers)必须在 watch
对象中定义,而计算属性(Computed Properties)必须在 computed
对象中定义。
watch
对象中定义一个或多个属性,每个属性对应一个要监听的数据,并指定一个处理函数。computed
对象中定义计算属性,每个属性对应一个计算值的处理函数。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://unpkg.com/vue@2.6.14/dist/vue.js"></script> </head> <div id="app"> <input type="text" v-model="name"> <p>新的 name: {{ name }}</p> <p>旧的 name: {{ oldName }}</p> </div> <script> var vm = new Vue({ el: '#app', data: { name: 'John', oldName: '' }, watch: { // 监听name属性的变化 name: function(newValue, oldValue) { this.oldName = oldValue; // 将旧的名字存储到oldName数据属性中 console.log('Name changed from ' + oldValue + ' to ' + newValue); } } }); </script> </html>
beforeCreate
: 组件创建之前实现这个:组件html,js–》html和js都是空的created
:组件创建完成后:js就有值了,html还是空的 (向后端发送ajax请求)beforeMount
:挂载模板之前,js有值,模板(html) 还是空的(向后端发送ajax请求)mounted
:挂载完成:js有值,模板有值beforeUpdate
:刷新之前执行:只要页面发送变化或js变量发生变化,就会触发它的执行updated
:刷新之后执行beforeDestroy
:被销毁之前执行 (资源清理性工作)destroyed
:被销毁之后执行# 1 new Vue---->根组件
# 2 创建全局组件---》放在根组件中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="./vue/vue.js"></script> </head> <body> <div id="app"> <h1>组件使用</h1> <button @click="hanleShow">显示隐藏组件</button> <hr> <Child v-if="isShow"></Child> <hr> </div> </body> <script> let a = { template: ` <div> <button @click="handleClick">{{ title }}</button> </div>`, data() { return { title: '首页', t:null } }, methods: { handleClick() { this.title = '拜年了' alert(this.title) } }, beforeCreate() { console.log('beforeCreate') console.log(this.title) console.log(this.$el) }, created() { // 跟后端交互 console.log('created') console.log(this.title) console.log(this.$el) // 启动定时器--》每隔3s,打印helloworld this.t=setInterval(()=>{ console.log('hello world') },3000) }, beforeMount() { console.log('beforeMount') console.log(this.title) console.log(this.$el) }, mounted() { console.log('mounted') console.log(this.title) console.log(this.$el) }, beforeUpdate() { console.log('beforeUpdate') }, updated() { console.log('updated') }, beforeDestroy(){ console.log('beforeDestroy') // 销毁定时器 clearInterval(this.t) this.t=null }, destroyed() { console.log('destroyed') }, } // 1 定义全局组件 Vue.component('Child', a) var vm = new Vue({ el: '#app', data: { isShow: true }, methods: { hanleShow() { this.isShow = !this.isShow } } }) </script> </html>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。