当前位置:首页 > VUE

vue联动实现代码

2026-01-23 03:45:48VUE

Vue 联动实现代码

Vue 中实现联动效果通常涉及父子组件通信、状态管理或动态数据绑定。以下是几种常见的联动实现方式:

父子组件通信实现联动

通过 props$emit 实现父子组件数据联动:

vue联动实现代码

<!-- 父组件 Parent.vue -->
<template>
  <div>
    <Child :selected="selectedItem" @update="handleUpdate" />
    <p>当前选择:{{ selectedItem }}</p>
  </div>
</template>

<script>
import Child from './Child.vue'
export default {
  components: { Child },
  data() {
    return {
      selectedItem: ''
    }
  },
  methods: {
    handleUpdate(value) {
      this.selectedItem = value
    }
  }
}
</script>
<!-- 子组件 Child.vue -->
<template>
  <select v-model="internalValue" @change="onChange">
    <option value="A">选项A</option>
    <option value="B">选项B</option>
  </select>
</template>

<script>
export default {
  props: ['selected'],
  data() {
    return {
      internalValue: this.selected
    }
  },
  watch: {
    selected(newVal) {
      this.internalValue = newVal
    }
  },
  methods: {
    onChange() {
      this.$emit('update', this.internalValue)
    }
  }
}
</script>

使用 Vuex 实现全局状态联动

当多个组件需要共享联动状态时,可以使用 Vuex:

vue联动实现代码

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    currentSelection: null
  },
  mutations: {
    setSelection(state, payload) {
      state.currentSelection = payload
    }
  }
})
<!-- 组件A -->
<template>
  <select v-model="selection" @change="updateSelection">
    <option value="1">选项1</option>
    <option value="2">选项2</option>
  </select>
</template>

<script>
import { mapState, mapMutations } from 'vuex'

export default {
  computed: {
    ...mapState(['currentSelection']),
    selection: {
      get() {
        return this.currentSelection
      },
      set(value) {
        this.setSelection(value)
      }
    }
  },
  methods: {
    ...mapMutations(['setSelection']),
    updateSelection() {
      this.setSelection(this.selection)
    }
  }
}
</script>

动态表单联动实现

实现表单字段间的动态联动:

<template>
  <div>
    <select v-model="form.type">
      <option value="student">学生</option>
      <option value="teacher">教师</option>
    </select>

    <div v-if="form.type === 'student'">
      <input v-model="form.studentId" placeholder="学号">
    </div>

    <div v-else-if="form.type === 'teacher'">
      <input v-model="form.teacherId" placeholder="工号">
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        type: '',
        studentId: '',
        teacherId: ''
      }
    }
  }
}
</script>

多级下拉菜单联动

实现省市区三级联动效果:

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

    <select v-model="selectedCity" @change="loadDistricts" :disabled="!selectedProvince">
      <option v-for="c in cities" :value="c.id" :key="c.id">
        {{ c.name }}
      </option>
    </select>

    <select v-model="selectedDistrict" :disabled="!selectedCity">
      <option v-for="d in districts" :value="d.id" :key="d.id">
        {{ d.name }}
      </option>
    </select>
  </div>
</template>

<script>
export default {
  data() {
    return {
      provinces: [],
      cities: [],
      districts: [],
      selectedProvince: null,
      selectedCity: null,
      selectedDistrict: null
    }
  },
  mounted() {
    this.loadProvinces()
  },
  methods: {
    loadProvinces() {
      // 模拟API请求
      this.provinces = [
        { id: 1, name: '广东省' },
        { id: 2, name: '浙江省' }
      ]
    },
    loadCities() {
      if (!this.selectedProvince) return
      // 模拟根据省份加载城市
      this.cities = [
        { id: 101, name: '广州市' },
        { id: 102, name: '深圳市' }
      ]
      this.selectedCity = null
      this.districts = []
    },
    loadDistricts() {
      if (!this.selectedCity) return
      // 模拟根据城市加载区县
      this.districts = [
        { id: 1001, name: '天河区' },
        { id: 1002, name: '越秀区' }
      ]
    }
  }
}
</script>

这些示例展示了 Vue 中实现联动的不同场景和方法,可以根据具体需求选择合适的实现方式。

标签: 代码vue
分享给朋友:

相关文章

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <…

vue页面实现

vue页面实现

Vue 页面实现方法 创建 Vue 组件 使用 Vue 单文件组件(SFC)方式创建页面,文件扩展名为 .vue。一个基本的 Vue 组件包含三个部分:模板(template)、脚本(script)和…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue首页实现

vue首页实现

实现Vue首页的基本步骤 创建一个Vue首页通常涉及项目初始化、页面结构设计、路由配置和组件开发。以下是具体实现方法: 初始化Vue项目 使用Vue CLI或Vite快速搭建项目结构: npm i…