Vue 2.7 提供了 provideinject API,用于在父组件中提供数据、方法等,并在子组件中注入使用。使用 provideinject 可以避免跨层级组件之间的数据传递问题,使代码更加简洁和灵活。

提供数据方法:

// 父组件
export default {
  provide() {
    return {
      name: 'vue',
      sayHello() {
        console.log('Hello Vue!')
      }
    }
  }
}

在子组件中使用:

// 子组件
export default {
  inject: ['name', 'sayHello'],
  mounted() {
    console.log(this.name) // 'vue'
    this.sayHello() // 'Hello Vue!'
  }
}

在 Vue 2.7 中,使用 inject 可以监听父组件提供的数据的变化,实现响应式更新。

// 父组件
export default {
  data() {
    return {
      message: 'Hello, Vue!'
    }
  },
  provide() {
    return {
      message: this.message
    }
  },
  methods: {
    changeMessage() {
      this.message = 'Hello, World!'
    }
  }
}

// 子组件
export default {
  inject: ['message'],
  mounted() {
    console.log(this.message) // 'Hello, Vue!'
  },
  watch: {
    message(newVal, oldVal) {
      console.log(`message changed from ${oldVal} to ${newVal}`)
    }
  }
}

在子组件中监听父组件提供的 message 属性的变化,当父组件中调用 changeMessage 方法更新 message 属性时,子组件会自动更新并触发响应式更新。

Vue 2.7 provide/inject: 跨组件数据传递与响应式监听

原文地址: http://www.cveoy.top/t/topic/lYgo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录