props 接收数据

props对象里面 键值 是对改数据的 数据类型 的规定。做了规范,使用者就只能传输指定类型的数据,否则报警告

先根据要求写出完整的代码,再一一用参数实现组件封装

这里试着封装一个select组件,主要是为了了解组件封装。参考自博客:https://www.cnblogs.com/pengfei-nie/p/9134367.html

效果:

sleceView:

  1. <template>
  2. <div class="partake">
  3. <div class="f-search" :class="{searchInFous: this.fousFlag}">
  4. <div class="f-searchIn">
  5. {{this.searchV}}
  6. <span :class="{searchActive: this.searchFlag}" @click="searchDown"></span>
  7. </div>
  8. <div class="f-searchXl" v-if="this.dataHas" :style="{height:this.searchFous, border:this.searchBorder}">
  9. <div v-for="(item,index) in searchList" @click="choseValue(item.value, item.key)" :key="index">{{item.value}}</div>
  10. </div>
  11. <div class="f-searchXl" v-else >
  12. <div>暂无数据</div>
  13. </div>
  14. </div>
  15. </div>
  16. </template>
  1. <script>
  2. export default {
  3. name: 'xuef',
  4. props: {
  5. searchList: Array,
  6. selectValue: String
  7. },
  8. data() {
  9. return {
  10. searchV: '',
  11. searchFlag: false,
  12. searchFous: '0',
  13. searchBorder: 'none',
  14. fousFlag: false,
  15. dataHas: true
  16. };
  17. },
  18. methods:{
  19. searchDown() {
  20. this.searchFlag === false ? this.searchFlag = true : this.searchFlag = false
  21. this.searchFous === '0' ? this.searchFous = 'auto' : this.searchFous = '0'
  22. this.searchBorder === 'none' ? this.searchBorder = '1px solid #D9D9D9' : this.searchBorder = 'none'
  23. this.fousFlag === false ? this.fousFlag = true : this.fousFlag = false
  24. },
  25. choseValue(value, key) {
  26. this.searchV = value
  27. this.searchDown()
  28. this.$emit('selectFunction', value, key)
  29. }
  30. },
  31. components:{
  32. }
  33. }
  34. </script>
  1. <style scoped rel="stylesheet/scss" lang="scss">
  2. .f-search{
  3. width: 250px;
  4. height: auto;
  5. position: relative;
  6. margin-left: 20px;
  7. box-sizing: border-box;
  8. }
  9. .f-searchIn{
  10. width: 250px;
  11. height: 35px;
  12. line-height: 35px;
  13. font-size: 0.95rem;
  14. border-radius: 5px;
  15. overflow: hidden;
  16. position: relative;
  17. background-color: white;
  18. box-shadow: none;
  19. box-sizing: border-box;
  20. color: #000000;
  21. padding-left: 10px;
  22. border: 1px solid #A3A3A3;
  23. }
  24. .searchInFous{
  25. border: 1px solid #57C4F6;
  26. box-shadow: 0px 0px 5px #57C4F6;
  27. }
  28. .f-searchIn > span{
  29. display: block;
  30. width: 28px;
  31. height: 28px;
  32. background-image: url(../../assets/images/down.png);
  33. background-size: 100% 100%;
  34. background-repeat: no-repeat;
  35. background-position: 0px -13px;
  36. position: absolute;
  37. top: 10px;
  38. right: 5px;
  39. }
  40. .f-searchIn .searchActive{
  41. background-position: 0px 12px;
  42. top: -2px;
  43. }
  44. .f-search .f-searchXl{
  45. position: absolute;
  46. width: 100%;
  47. height: auto;
  48. max-height: 220px;
  49. top: 41px;
  50. left: -1px;
  51. border-radius: 5px;
  52. /*border: 1px solid #D9D9D9;*/
  53. background-color: white;
  54. overflow-x: hidden;
  55. overflow-y: scroll;
  56. }
  57. .f-search .f-searchXl > div{
  58. height: 35px;
  59. line-height: 38px;
  60. color: #000000;
  61. padding-left: 25px;
  62. font-size: 0.92rem;
  63. }
  64. .f-search .f-searchXl > div:hover{
  65. background-color: #D5F1FD;
  66. }
  67. </style>

引用这个组件的view:useSelect

  1. <template>
  2. <div class="partake">
  3. <section class="f-mainPage">
  4. <search @selectFunction="selectFunc" :searchList="searchList" :selectValue="selectValue"></search>
  5. </section>
  6. </div>
  7. </template>
  1. <script>
  2. import search from 'components/component/selectView';
  3. export default {
  4. name: 'xuef',
  5. data() {
  6. return {
  7. searchList: [{key:'1',value:'草船借箭'},{key:'2',value:'大富翁'},{key:'3',value:'测试数据'}],
  8. selectValue: '',
  9. selectKey: ''
  10. };
  11. },
  12. methods:{
  13. selectFunc(val,key) {
  14. this.selectValue = val
  15. this.selectKey = key
  16. console.log(this.selectKey)
  17. console.log(this.selectValue)
  18. }
  19. },
  20. components:{
  21. search
  22. }
  23. }
  24. </script>

vue 封装组件的更多相关文章

  1. vue封装组件的正确方式-封装类似elementui的组件

    最近读了下element的源码,仿照他封装了两种不同的组件. 第一种:通过组件来调用显示的 <template> <!--src/component/custom/main.vue- ...

  2. vue 封装组件上传img

    var _uploadTemplate = '<div>'+ '<input type="file" name="file" v-on:cha ...

  3. Vue 爬坑之路(九)—— 用正确的姿势封装组件

    迄今为止做的最大的 Vue 项目终于提交测试,天天加班的日子终于告一段落... 在开发过程中,结合 Vue 组件化的特性,开发通用组件是很基础且重要的工作 通用组件必须具备高性能.低耦合的特性 为了满 ...

  4. seventBus(封装) 一个巧妙的解决vue同级组件通讯的思路

    如果在你项目中需要多处用到同级组件通讯,而又不想去写繁琐的vuex,可以参考这个小思路.本人在写项目中琢磨出来的,感觉挺好用,分享一下. 1.在utils文件夹下添加BusEvent.js 注释已经很 ...

  5. vue封装一些常用组件loading、switch、progress

    vue封装一些常用组件loading.switch.progress github文档https://github.com/zengjielin/vue-component-library loadi ...

  6. vue --》组件的封装 及 参数的传递

    vue组件的定义 ● 组件(Component)是Vue.js最强大的功能之一 ● 组件可以扩展HTML元素,封装可重用代码 ● 在较高层面上,组件是自定义元素,Vue.js的编译器为他添加特殊功能 ...

  7. vue cli3.0 封装组件全局引入js文件并发布到npm

    首先用 vue create创建一个项目 当前的项目目录是这样的: 首先需要创建一个 packages 目录,用来存放组件 然后将 src 目录改为 examples 用作示例 二.修改配置 启动项目 ...

  8. echars vue 封装全局组件 曲线 柱状图 同v-chars绿色系 配置样式

    Echars vue封装 ,曲线图 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  9. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

随机推荐

  1. gdb常用命令及gdb调试多进程/线程程序&coredump

    一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...

  2. mysql的配置说明

    查询最高内存占用 使用以下命令可以知道mysql的配置使用多少 RAM SELECT ( @@key_buffer_size + @@query_cache_size + @@innodb_buffe ...

  3. WPF 杂记

    1,跨屏最大化 单屏幕的时候我们可以设置 WindowState 来使应用最大化 当接多个屏幕的时候,就需要下面这个设置: private void FullScreen() { this.Windo ...

  4. C++运算符重载——类型转换

    类型转换函数能够实现把一个类 类型 转换成 基本数据类型(int.float.double.char等) 或者 另一个类 类型. 其定义形式如下,注意不能有返回值,不能有参数,只能返回要转换的数据类型 ...

  5. contos最小包安装完后一些准备

    yum upgradeyum install net-toolsyum -y install wgetyum -y install vim-enhanced yum install gcc gcc-c ...

  6. 实时流式计算框架——JStorm

    1.本地调试 a.步骤:生成Topology——实现Spout接口——实现Bolt接口——编译运行 b.加入依赖 <!-- JStorm --> <dependency> &l ...

  7. 安装Hive过程中报错:Unsupported major.minor version 52.0

    在安装hive的过程中,我觉得我是按照教程走的,但是在启动hive时还是报错了,错误如下 Exception in thread "main" java.lang.Unsuppor ...

  8. Docker操作笔记(四)使用网络

    使用网络 Docker允许通过外部访问容器或容器互联的方式来提供网络服务. 一.外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. 当 ...

  9. You must configure either the server or JDBC driver (via the serverTimezone configuration property

    使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one ...

  10. Egret的Shape

    class ShapeTest extends egret.DisplayObjectContainer { public constructor() { super(); this.addEvent ...