当前位置:首页 > VUE

vue实现联动 get

2026-01-16 06:59:06VUE

Vue 实现联动效果的方法

在 Vue 中实现联动效果通常涉及父子组件通信、状态管理或事件监听。以下是几种常见方法:

使用 v-model 和 props

父组件通过 props 传递数据给子组件,子组件通过 $emit 触发事件更新父组件数据:

vue实现联动 get

// 父组件
<template>
  <child-component v-model="parentData" />
</template>

<script>
export default {
  data() {
    return {
      parentData: ''
    }
  }
}
</script>

// 子组件
<template>
  <input :value="value" @input="$emit('input', $event.target.value)" />
</template>

<script>
export default {
  props: ['value']
}
</script>

使用 Vuex 状态管理

对于复杂联动,可使用 Vuex 集中管理状态:

// store.js
export default new Vuex.Store({
  state: {
    sharedData: ''
  },
  mutations: {
    updateData(state, payload) {
      state.sharedData = payload
    }
  }
})

// 组件A
<template>
  <input :value="$store.state.sharedData" @input="updateStore" />
</template>

<script>
export default {
  methods: {
    updateStore(e) {
      this.$store.commit('updateData', e.target.value)
    }
  }
}
</script>

// 组件B
<template>
  <div>{{ $store.state.sharedData }}</div>
</template>

使用事件总线

对于非父子组件通信,可创建事件总线:

vue实现联动 get

// eventBus.js
import Vue from 'vue'
export const EventBus = new Vue()

// 组件A
<script>
import { EventBus } from './eventBus'
export default {
  methods: {
    triggerEvent() {
      EventBus.$emit('data-change', newData)
    }
  }
}
</script>

// 组件B
<script>
import { EventBus } from './eventBus'
export default {
  created() {
    EventBus.$on('data-change', data => {
      this.handleData(data)
    })
  }
}
</script>

使用 provide/inject

对于深层嵌套组件,可使用依赖注入:

// 祖先组件
<script>
export default {
  provide() {
    return {
      sharedData: this.sharedData
    }
  },
  data() {
    return {
      sharedData: 'initial value'
    }
  }
}
</script>

// 后代组件
<script>
export default {
  inject: ['sharedData'],
  methods: {
    updateData() {
      this.sharedData = 'new value'
    }
  }
}
</script>

表单联动实现示例

典型表单联动场景可通过计算属性和 watch 实现:

<template>
  <select v-model="selectedProvince">
    <option v-for="p in provinces" :value="p.id">{{ p.name }}</option>
  </select>

  <select v-model="selectedCity">
    <option v-for="c in filteredCities" :value="c.id">{{ c.name }}</option>
  </select>
</template>

<script>
export default {
  data() {
    return {
      provinces: [],
      cities: [],
      selectedProvince: null,
      selectedCity: null
    }
  },
  computed: {
    filteredCities() {
      return this.cities.filter(c => c.provinceId === this.selectedProvince)
    }
  },
  watch: {
    selectedProvince() {
      this.selectedCity = null
    }
  },
  async created() {
    this.provinces = await fetchProvinces()
    this.cities = await fetchCities()
  }
}
</script>

注意事项

  1. 避免直接修改 props 中的数据,应使用事件通知父组件修改
  2. 复杂场景建议使用 Vuex 管理状态
  3. 事件总线需注意及时移除监听避免内存泄漏
  4. provide/inject 应谨慎使用,可能使组件间耦合度增加

标签: vueget
分享给朋友:

相关文章

vue实现前端分离

vue实现前端分离

Vue 实现前后端分离 前后端分离是一种架构模式,前端负责页面渲染和交互逻辑,后端提供数据接口。Vue.js 作为前端框架,非常适合实现前后端分离的开发模式。 核心实现步骤 创建 Vue 项目 使…

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const t…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 使用window.print()方法 这是最简单的打印方式,直接调用浏览器的打印功能。 me…

vue设计与实现目录

vue设计与实现目录

以下是《Vue设计与实现》一书的典型目录结构(根据常见技术书籍及Vue核心内容整理): 响应式系统 响应式数据的基本原理 依赖收集与触发更新 实现简易响应式系统 Proxy与Reflec…

vue实现飘窗原理

vue实现飘窗原理

vue实现飘窗原理 飘窗效果通常指在页面上悬浮显示的弹窗或通知,跟随页面滚动或固定在某个位置。Vue实现这一效果主要依赖组件化开发、CSS定位和动态数据绑定。 组件结构设计 创建一个独立的Vue组件…

vue实现用户信息表

vue实现用户信息表

Vue 实现用户信息表的方法 使用 Vue CLI 创建项目 安装 Vue CLI 并初始化项目: npm install -g @vue/cli vue create user-info-tab…