组件通信+依赖注入、watch和computed区别

一、组件基础铺垫

1、vue框架中提倡组件化开发,组件是一个独立的模块,数据、方法不能直接相互使用;

2、组件是多例的,组件是一个构造函数的实例化对象,单例情况下都引用同一个实例,会造成数据污染,所以组件是多例的,数据不共用(组件实例化,是在视图渲染时创建的)

 <my-lable></my-lable>
   const MyLable = {
       template:`<div>内容</div>`
   }
app.component('my-lable', MyLable)

二、组件通信 

        1、父子组件传值 

(1)父传子 props

//子组件内定义props属性来接收父组件的数据
       props:{			       
           parentTitle:{
               required: true   //要求必传
           }
       } 

//父组件内的子组件标签上动态绑定props内的属性
  <child-title :parent-title="传值"><child-title/>  //不写:会被认为传的是字符串

(2) 子传父  $emit

// 在子组件内触发自定义事件
      <button @click="addEvt"><button/>
      methods:{
          addEvt(){
              this.$emit('myClick', 2)
          }
      }


// 在父组件内的子组件标签上自定义事件,绑定修改数据的回调方法(子组件触发父组件事件去修改)
      <child-title @myClick="changeCount"><child-title/>
      methods:{
          changeCount(step){
              this.count += step
          }
      }

        2、实例传值

(1)this.$parent.list    //直接获取父组件实例,就可修改实例任意东西
   (2) this.$children    //获取子组件实例,只有Vue2可用    
   (3) this.$refs        //组件标签上绑定ref属性,可获取组件实例

 三、provide提供 + inject注入 (跨组件通信)

 (1)对象写法:只能传递固定数据,不能使用this:
    provide:{}    

(2)函数形式:可用this,if需要修改数据,则需用computed函数来实时监听

 provide(){        //提供
        return {
            title: this.title,
            count: vue.computed( () => this.mycount )	//自动return
        }
    }
inject:['title']    //注入

四、watch观察属性

 作用:用于在完成页面和数据交互之前,对新数据进行判断和预处理;监听属性值的修改

watch:{
        list: function(newValue, oldValue){
            this.manCount = newValue.filter(it => it.sex === '男' ).length
            this.beautyCount = newValue.filter(it => it.sex === '女' ).length
        }  //浅监听
        list:{
            deep: true,		//深度监听
            handler: function(newValue, oldValue){
                this.manCount = newValue.filter(it => it.sex === '男' ).length
                this.beautyCount = newValue.filter(it => it.sex === '女' ).length
        	}
        }
    }

五、computed计算属性

 computed内有getter方法,定义时为方法,使用时为值

        依赖于data中的属性,data发生了变化,就会触发调用一次computed

class Test {
    get value(){
        return 1000		//getter定义时为值,使用时为值
    }
}
var a = new Test()
a.value //输出结果为1000

computed:{
    beautyCount(){
        return this.list.filter(it => it.sex === '女').length
    }
}

 computed计算属性和watch属性之间的区别 

        watch 通过监听 data 中的某个属性的变化来触发回调函数,而 computed 则依赖于 data 中的一些属性计算出一个新的值,它会自动进缓存,在依赖的值发生变化时会进行重新计算。
总结来说:
        watch 主要用于监听特定属性的变化,以触发对应的回调函数,适用于处理一些异步或与后端交互的操作。

        computed 主要用于根据data 中的属性计算出一个新的值,它会自动缓存和监听依赖的属性,适用于在模板中展示计算后的结果

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值