前端流行框架Vue3教程:16. 组件事件配合`v-model`使用

boyanx5个月前技术教程18

组件事件配合v-model使用

如果是用户输入,我们希望在获取数据的同时发送数据配合v-model 来使用,帮助理解组件间的通信和数据绑定。


第一步:创建子组件(SearchComponent.vue)

这个组件用于处理用户的搜索输入,并将输入值传递给父组件。

功能说明:

  1. 数据属性 search:在 [data()]中定义了一个名为 search 的数据属性,作为输入框的双向绑定。
  2. 使用 v-model:模板中的 <input type="text" v-model="search"> 实现了用户输入与 search 数据的同步。
  3. 监听器 [watch]:当 search 发生变化时,通过 $emit 触发一个名为 searchEvent 的自定义事件,并传入新的值。
  4. 输出事件 searchEvent:该事件允许父组件订阅并接收子组件的数据更新。

代码结构:

<script>
import SearchComponent from './SearchComponent.vue'

export default {
  components: {
    SearchComponent
  },
  data() {
    return {
      search: ''
    }
  },
  methods: {
    getSearch(data) {
      this.search = data
    }
  }
}
</script>

<template>
  <h3>Main</h3>
  <p>搜索内容 {{ search }}</p>
  <SearchComponent @searchEvent="getSearch"/>
</template>

第二步:创建主组件(Main.vue)

这个组件负责显示来自子组件的数据,并展示到页面上。

功能说明:

  1. 引入子组件:使用 import SearchComponent from './SearchComponent.vue' 引入子组件。
  2. 注册组件:在 [components]属性中注册 SearchComponent
  3. 数据属性 search:用来保存从子组件接收到的搜索内容。
  4. 方法 getSearch(data):响应子组件发出的 searchEvent 事件,将数据赋值给 this.search
  5. 模板渲染:使用插值表达式 {{ search }} 显示当前搜索内容,并通过 @searchEvent="getSearch" 监听子组件的事件。

代码结构:

<script>
import SearchComponent from './SearchComponent.vue'

export default {
  components: {
    SearchComponent
  },
  data() {
    return {
      search: ''
    }
  },
  methods: {
    getSearch(data) {
      this.search = data
    }
  }
}
</script>

<template>
  <h3>Main</h3>
  <p>搜索内容 {{ search }}</p>
  <SearchComponent @searchEvent="getSearch"/>
</template>

第三步:运行项目

确保你的项目结构如下:

src/
├── components/
│   ├── SearchComponent.vue
│   └── Main.vue
├── App.vue
└── main.js

修改 [App.vue]:

template>
  <Main />
</template>

<script>
import Main from './components/Main.vue'

export default {
  components: {
    Main
  }
}
</script>

然后启动项目:

npm run dev

访问 localhost:端口,你应该能看到一个搜索框和下方显示的搜索内容。


总结

  • 父子组件通信:通过 $emit 在子组件中发送事件,在父组件中监听并处理。
  • 数据绑定v-model 简化了表单元素与数据之间的双向绑定。
  • 模块化开发:将功能拆分为多个组件,提高可维护性和复用性。

相关文章

Vue进阶(幺伍肆):vue-resource(vue-resource.js)

前言vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。也就是说,$.ajax能做的事情,vue-resource插件一样也能做到,...

前端大文件切片上传,断点续传、秒传等解决方案,VUE中使用实例

前端大文件切片上传,断点续传、秒传等解决方案,VUE中使用实例,NGINX支持超大文件HTTP断点续传,VUE实现文件的分片上传,前端大文件上传处理方案,如何解决控件附件上传时超大附件无法上传的问题,...

Vue+Element UI实现断点续传、分片上传、秒传

作者:Pseudo 转发链接:https://segmentfault.com/a/1190000023434864凡是要知其然知其所以然文件上传相信很多朋友都有遇到过,那或许你也遇到过当上传大文件时...

基于Vue.js的http网站如何实现帐号密码加密传输?

背景现在大部分网站都采用 https 协议来传输数据,客户端和服务端自动通过证书完成密钥协商和数据加密传输的过程。但是,https 证书一般都是要收费的,因此有些网站开发时还会直接使用 http 协议...

vue 如何实现跨域(vue实现跨域问题)

跨域问题是因为浏览器的同源策略引起的,一种浏览器的安全机制,要求协议,域名,端口,都要一致!出于浏览器的同源策略限制,浏览器会拒绝跨域请求。什么叫跨域?非同源请求,均为跨域。名词解释:同源 —— 如果...

vue.js中mounted(vue中vfor的使用)

mounted是Vue生命周期钩子函数之一,它表示Vue实例已经被挂载到DOM元素上。在mounted钩子函数中,可以执行一些需要在Vue实例挂载后立即执行的操作,比如获取数据、初始化插件、绑定事件等...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。