在父组件中,如果必要获取子组件中的数据,有两种方式,一种是在子组件中自定义事件,父组件绑定该事件,当触发自定义事件时,向父组件传入参数;另一种是先通过ref属性给子组件命名,然后在父组件中就可以调用$refs对象,访问命名的子组件中数据。
子组件自定义事件传参
父组件通过绑定子组件中自定义的事件,在触发的事件中,获取传入的数据,这种方式是子组件向父组件传参的紧张方式,接下来通过一个实例来演示它实现的过程。
实例7-2 子向父组件传参
1. 功能描述
在实例7-1的底子之上,向子组件的视图中添加一个“长度”按钮,当点击该按钮时,获取父组件传入数据的长度,并通过自定义的事件,将该长度值传递给父组件,父组件接收该值后,显示在页面中。
2. 实现代码
在项目标components 文件夹中,添加一个名为“Parent”的.vue文件,该文件的保存路径是“components/ch7/part2/”,在文件中到场如清单7-3所示代码。
代码清单7-3 Parent.vue代码
- <template>
- <div class="iframe">
- <div class="i-left">
- <span>父组件:</span>
- <input v-model="name" placeholder="请输入用户名" />
- </div>
- <div class="i-right">
- {{ len }}
- </div>
- </div>
- <!-- 在父组件中调用子组件 -->
- <Child :inputName="name" @getLength="onGetLength" />
- </template>
- <script>
- import Child from "./Child.vue"
- export default {
- data() {
- return {
- name: "",
- len: 0
- }
- },
- components: {
- Child
- },
- methods: {
- onGetLength(data) {
- this.len = data
- }
- }
- }
- </script>
- <style>
- .iframe {
- width: 300px;
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 8px;
- border: solid 1px #ccc;
- }
- .i-left {
- display: flex;
- align-items: center;
- }
- .iframe input {
- padding: 8px;
- }
- .iframe:last-child {
- border-top: none;
- padding: 16px 8px;
- background-color: #eee;
- }
- </style>
复制代码 在父组件中,导入并注册了一个名称为Child的子组件,它的功能是通过自定义的事件向父组件传递数据,并将该数据显示在视图模块中,它的代码如清单7-4所示。
代码清单7-4 Child.vue代码
- <template>
- <div class="iframe">
- <div class="i-left">
- <span>子组件:</span>
- <span>{{ inputName }}</span>
- </div>
- <div class="i-right">
- <button @click="onGetLength">长度</button>
- </div>
- </div>
- </template>
- <script>
- export default {
- props: {
- inputName: {
- type: String,
- required: true
- }
- },
- emits: ["getLength"],
- methods: {
- onGetLength() {
- this.$emit("getLength", this.inputName.length)
- }
- }
- }
- </script>
复制代码 3. 页面效果
保存代码后,页面在Chrome浏览器下实行的页面效果如图7-3所示。
4. 源码分析
在子组件Child的源码中,为了能向父组件传递参数,先在“emits”选项中定义一个名为“getLength”的事件,当点击“长度”按钮时,实行该事件,同时,将inputName数据的长度值作为事件携带的参数。
在父组件Parent的源码中,为了能接收到子组件传入的参数,则在调用子组件时,绑定自定义的“getLength”事件,并在事件实行时,获取携带的参数值,并将该值作为变量,绑定到视图的元素中,从而最终实现子组件向父组件传参的过程。
必要说明的是:自定义事件携带的参数可以是一个变量,也可以是一个对象,如果必要传递多项数据,则可以借助对象的形式向父组件传递。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |