📣文章目录

简介:

通常我们会把比较重复的标签提取到组件中使用,这样的好处是我们不需要编写重复代码,只需要引入对应组件即可,还有就是如果对通用的组件进行添加新元素,引用的组件也会有相同效果,如果是每个页面都写了重复的代码,哪天产品提新需求添加效果时,那你只能一个一个页面进行更改

该界面需要提取组件如图:

Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_javascript

如图所示:
下拉刷新这个功能应该是非常常见的吧,如果我单独在获取用户地址这里加下拉刷新,那我下一个开发的界面是购物车界面是不是也需要下拉刷下页面发送请求获取最新数据呢?索性我们直接吧下拉刷新提取成一个组件使用,以后有需要我们就引入公共的下拉组件

使用的是Vant 一个轻量、可靠的移动端组件库里面的下拉刷新组件

Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_前端_02


下拉调用该方法

Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_前端_03

首先明确需要准备那些:

  1. 需要把下拉刷新的组件提取成单独的页面
  2. 使用插槽​​slot​​标签表示父组件的元素
  3. 使用​​props​​中定义父页面传递的刷新方法

按照步骤走:

1.组件提取成单独页面(提取组件)

在组件目录下创建,一般组件目录叫​​components​

Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_前端_04

模板代码:

<template>
<van-pull-refresh
v-model="isLoading"
success-text="刷新成功"
@refresh="onRefresh"
style="overflow:visible"
>
<!-- 使用插槽slot 这个代表组件内父元素会表示在slot标签中 -->
<slot></slot>
</van-pull-refresh>
</template>

js代码:

<script>
import { PullRefresh } from 'vant';
export default {
props:{
// 接口请求列表的方法
refresh: {
//定义成函数,用于传递父类的方法
type: Function,
required: true,
},
},
components: {
PullRefresh
},
data() {
return {
//加载状态
isLoading:false
};
},
computed:{
},
methods: {
onRefresh() {
//调用组件方法内的父类方法,用于刷新数据
this.refresh();
//刷新完成后关闭刷新界面
this.isLoading=false;
console.log("父方法调用完成后改变状态",this.isLoading)
},
},
};
</script>

2.父页面引用组件

script标签中添加,导入组件的位置

import PullRefresh from '@/views/components/PullRefresh/index';

Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_下拉刷新_05

模板代码中添加组件

<PullRefresh
:refresh="onRefresh"
>
<!--下面的内容会在组件的插槽中展示 -->
<AddressList v-if="list.length" :list="list"/>
<van-empty v-else class="empty" :description="listEmptyText"></van-empty>
<!--可以是任何元素...-->

</PullRefresh>

上面的解析:

​:refresh​​​会绑定下拉刷新组件中的​​props​​​中​​refresh​​对象并且他的类型是需要接收父组件传递的方法

Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_下拉刷新_06

Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_下拉刷新_07


父页面传递到下拉刷新组件中的​​onRefresh​​方法

Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_vue.js_08

3.查看效果

下拉刷新完成后,也获取到后端数据了

Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_父页面_09


Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_父页面_10


Vue把常用 【组件提取】 出来后使用【插槽把父元素】传入【组件中】_vue.js_11