javascript - 将事件从子组件引发到 Vue.js 中的容器组件?
问题描述
我有一个子 Vue 组件 (SearchBox.Vue),它是一个简单的文本框,当用户按下 Enter 键时会触发 filterByEvent。在容器组件中,我应该获取文本框中的字符串并执行一个函数 filterList 以根据输入的名称过滤客户的列表。我的问题是如何将文本框中输入的文本传递给父组件?
搜索框.vue
<template>
<div class="SearchBox">
<input type="text" id="SearchBox" placeholder="Search"
v-on:keyup.13="$emit('FilterByEvent', $event.target.value)" :value="value" >
<font-awesome-icon icon="search" />
</div>
</template>
<script>
export default {
name: 'SearchBox',
data() {
return {
value: ''
}
}
}
</script>
<style scoped>
.SearchBox {
display: flex;
}
</style>
容器代码
<template>
<div>
<div>
<SearchBox @FilterByEvent="filterList(value)"></SearchBox>
</div>
</div>
</template>
<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator'
import SearchBox from '@/components/templates/SearchBox.vue'
@Component({
components: {
SearchBox
}
})
export default class ContactList extends Vue {
data() {
return {
filterString: ''
}
}
filterList(filterStr :string) {
this.$data.filterString = filterStr;
}
}
</script>
解决方案
该事件不起作用,因为该组件正在侦听驼峰事件。这是为什么这不起作用的解释。加上@FilterByEvent
期望一个函数执行。所以改用
<SearchBox @filter-by-event="filterList"></SearchBox>
并以这种方式发出事件:
<div class="SearchBox">
<input type="text" id="SearchBox" placeholder="Search"
v-on:keyup.13="$emit('filter-by-event', $event.target.value)" :value="value" >
推荐阅读
- scikit-learn - 将 scikit-learn 0.17 版代码翻译成 0.20 版
- performance - 实时收集 Linux 上运行的 .Net Core 2.1 应用程序的 GC 指标
- php - 如何将 xdebug “导入”到现有的 php docker 容器中
- javascript - 使用 css/javascript 更改图例背景颜色
- ios - 在 Objective-C 中放置主线程阻塞操作的最佳生命周期方法
- android - 为什么 androidx espresso .check() 会导致 androidx.test.espresso.IdlingResourceTimeoutException
- xml - 使用 XSLT 文件将 XML 转换为 XML
- excel - Excel UDF 按名称指定表格行和列
- javascript - React JS:如何从父组件访问子组件的状态对象
- ms-access - MS Access:ReportView 显示的值与 PrintView 不同