封装vue2局部组件都要注意什么

这篇具有很好参考价值的文章主要介绍了封装vue2局部组件都要注意什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 关于局部组件组成的三个部分(template, script, style)

  1. template  =>  组件的模板结构  (必选)

  • 每个组件对应的模板结构,需要定义到template节点中
<template>
    <!-- 当前组件的dom结构,需要定义到template结构的内部 -->
</template>
  • template中使用的指令
<template>
    <!-- 【1.内容渲染指令】 -->
    <span v-text="msg"></span>
    <span>{{msg}}</span>
    <div v-html="html"></div>

    <!-- 【2.属性绑定指令】 -->
    <img v-bind:src="imageSrc">

    <!-- 【3.双向指令绑定指令】 -->
    <select v-model=""></select>

    <!-- 【4.循环渲染指令】 -->
    <div v-for="(item, index) in items"></div>

    <!-- 【5.条件渲染】 -->
    <div v-if="Math.random() > 0.5">Now you see me</div>
    <div v-else-if="type === 'B'"></div>
    <div v-else>Now you don't</div>
</template>
  • template定义根节点

注:vue 2.x版本中,<template>节点内dom结构仅支持单个根节点;但在vue 3.x版本中,支持多个根节点

  1. script  =>  组件的javascript行为  (可选)

  • script中的data节点(可以定义当前组件渲染期间需要用到的数据对象;data是一个函数)
  • script中的methods节点(可以定义组件中的事件处理函数)
  1. style  =>  组件的样式  (可选)

  • style的lang属性支持可选值css,less,sass,scss
  • 当使用less或sass时,要先安装less或sass依赖,再设置lang的属性值为less或sass
  • scss是sass3.0引入的语法,可以理解scss是sass的一个升级版本,弥补sass和css之间的鸿沟
  • 合理使用scoped,因为使用scoped可以让样式只对当前组件生效

二. 关于生命周期

  • beforeCreate
  • created
  • beforeMounted
  • mounted
  • beforeUpdate
  • updated
  • beforeDestory
  • destoryed

created和mounted的区别:created在模板渲染成html前调用,mounted在模板渲染成html后调用

三. 关于父子组件的传值

封装出来的通用组件叫子组件,引用通用组件的界面叫做父组件,组件的封装必须高性能低耦合

1. 父组件向子组件传参用props

<!-- 父组件 -->
<template>
    <Child :articleList="articleList"></Child>
</template>

<!-- 子组件 -->
<template>
    <div>
        <ul>
            <li v-for="(value,index) in articleList" :key="index">{{value}}</li>
        </ul>
    </div>
</template>

<script>
    export default {
        name: "Child",
        props: {
            articleList: {
                type: array,
                default: function () {
                    return []
                }    
            }
        },//接收父组件传来的数据articleList
    }
</script>

2. 子组件向父组件传参用emit

<!-- 父组件 -->
<template>
    <common-dialog @pushId="getId"></common-dialog>
</template>
<script>
    methods: {
        getId (id) {}
    }
</script>

<!-- 子组件 -->
<template>
    <div>
         <input type="button" @click="emitIndex(id)" value="向父组件发送数据">
    </div>
</template>
<script>
    export default {
        methods: {
            emitIndex (id) {
                this.$emit('pushId', id)
            }
        }
    }
</script>

四. 关于computed与watch

1. computed与watch的区别:

  • computed是计算属性,watch是监听,监听data中的数据变化
  • computed支持缓存,即当其依赖的属性值发生变化时,计算属性会重新计算,反之则使用缓存中的属性值;watch不支持缓存,当对应属性发生变化的时候,响应执行
  • computed不支持异步,有异步操作时无法监听数据变化;watch支持异步

2. computed与watch的使用场景

  • computed的使用
<template>
    <div>
        {{ changewords }}
    </div>
</template>
<script>
    export default {
       data () {
          myname: 'aBcDEf'
       },
       computed: {
          changewords(){
            return this.myname.substring(0,1).toUpperCase()
          }
       }   
    }
</script>
  • watch的使用
<template>
     <div>
       <p>FullName: {{fullName}}</p>
       <p>FirstName: <input type="text" v-model="firstName"></p>
     </div>
</template>
<script>
    export default{
        data () {
          firstName: 'Dawei',
          lastName: 'Lou',
          fullName: ''
        },
        watch: {
          firstName(newName, oldName) {
            this.fullName = newName + ' ' + this.lastName;
          }
          // firstName: {
          //     handler(newName, oldName) {
          //        this.fullName = newName + ' ' + this.lastName;
          //     },
          //     immediate: true
          // }
        }
    }
</script>

五. 关于mixin

局部混入中mixin的文件就是一个对象,这个对象可以包含vue组件的一些常见的配置,包括data,methods,生命周期的钩子函数等等。

不同组件中的mixin是相互独立的。

  • mixin的使用

<!-- 引用mixins的文件 -->
<script>
    import queryList from "@/common/mixin/queryList";
    export default{
        mixins: [queryList]
    }
</script>

<!-- mixins的文件 -->
export const mixins = {
  data() {
    return {};
  },
  computed: {},
  created() {},
  mounted() {},
  methods: {},
};

六. 关于slot的使用

<!-- 子组件使用插槽slot   Link.vue-->
<template>
  <a :href="href" rel="external nofollow"  class="link">
    <!-- 留个插槽,外界传入内容放置在这里 -->
    <slot></slot>
  </a>
</template>

<!-- 父组件调用子组件 -->
<template>
  <div class="app">
    <Link href="https://baidu.com" rel="external nofollow" > 百度</Link>
    <Link href="https://google.com" rel="external nofollow"  style="margin-top: 10px">
      <!-- 这里允许放置任意的内容,包括字符串和标签 -->
      <span>Icon</span>谷歌</Link
    </Link>
  </div>
</template>

七. 关于vuex

vuex的五个组成部分:state,mulations,action,getters,modules文章来源地址https://www.toymoban.com/news/detail-644634.html

  • state:定义了应用程序的状态,即要管理的数据
const store = new Vuex.Store({
  state: {
    count: 0
  }
})
  • getters:用于获取state中的状态,类似vue组件中的计算属性
const store = new Vuex.Store({
  state: {
    count: 0
  },
  getters: {
    doubleCount(state) {
      return state.count * 2
    }
  }
})
  • mulations:修改state的数据
const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    },
    add(state, payload) {
      state.count += payload
    }
  }
})
  • action:用于异步操作和提交mulations,在actions中可以进行任何异步操作,最后再提交到mulations中同步修改state
const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  },
  actions: {
    incrementAsync(context) {
      setTimeout(() => {
        context.commit('increment')
      }, 1000)
    }
  }
})
  • modules:用于将store分割成模块,每个模块都拥有自己的state, getters, mulations, action和子模块,以便提高应用程序的可维护性
const store = new Vuex.Store({
  modules: {
    cart: {
      state: {
        items: []
      },
      mutations: {
        addItem(state, item) {
          state.items.push(item)
        }
      },
      actions: {
        addAsyncItem(context, item) {
          setTimeout(() => {
            context.commit('addItem', item)
          }, 1000)
        }
      }
    }
  }
})

到了这里,关于封装vue2局部组件都要注意什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue2封装一个步进器组件number-box

    最近做一个商城的项目,商品的详情页和购物车列表都需要用到上面数量增减的功能,其实这个是一个很普通的功能,但是购物车的列表是放到vuex里面的,这里记录使用的差别: 首先封装number-box组件: 在列表页去引用,并使用v-vmode传递数据: 如果数据是直接在data下面,直

    2024年02月04日
    浏览(35)
  • 前端歌谣-第伍拾陆课-vue2-element组件封装el-button-groups(续)

    我是歌谣 今天继续给大家带来el-button-groups(项目的讲解

    2024年02月03日
    浏览(30)
  • vue2.x-echarts公共组件封装--简易篇(3d柱状图,炫酷仪表盘,折线,曲线图)

    更新一下之前写的echarts简单图表公共组件的封装,该组件可以实现自适应展示效果 废话不多说,上代码: vue-echarts通用组件 下面的一个混入文件是用来实现,窗口改变echarts自适应的js文件: 接下来是debounce.js 下面直接上代码:父组件调用+展示效果 截图: 下面是一个仪表盘

    2023年04月13日
    浏览(56)
  • Vue2自己封装的基础组件库或基于Element-ui再次封装的基础组件库,如何发布到npm并使用(支持全局或按需引入使用),超详细

    以下我以 wocwin-admin-vue2 项目为例 修改目录结构,最终如下 1、导入组件,组件必须声明 name 2、定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,则所有的组件都将被注册 3、导出的对象必须具有 install,才能被 Vue.use() 方法安装(全局使用) 4、按需引入 5、packa

    2024年02月08日
    浏览(64)
  • 什么???你连vue中父组件怎么监听子组件的事件都不知道?快来看看vue2和vue3中父组件监听子组件事件的区别吧

    vue2和vue3中父组件监听子组件事件的区别 在Vue 2中,可以使用$emit方法在子组件上触发自定义事件,并使用v-on或@指令在父组件中监听该事件,也就是通过父组件给子组件绑定一个自定义事件实现子给父传递数据。例如: 在这个例子中,当子组件中的按钮被单击时,将触发ch

    2024年02月12日
    浏览(33)
  • vue2+ant-design-vue a-select组件二次封装(支持单选/多选添加全选/分页(多选跨页选中)/自定义label)

    参数 说明 类型 默认值 v-model 绑定值 boolean / string / number/Array - mode 设置’multiple’\\\'tags’多选 (显示全选) String - optionSource 下拉数据源 Array - width select宽度(可以设置百分比或px) String 100% customLabel 是否自定义设置下拉label String - valueKey 传入的 option 数组中,要作为最终选择

    2024年02月08日
    浏览(30)
  • Vue 全组件 局部组件

    一、组件定义和使用 定义 template     div         h1This is a global component/h1     /div /template script lang=\\\"ts\\\" /script style/style   导入 全局组件在main.ts(Vue + TS的项目)引入, 或者在main.js(Vue + JS的项目)引入 import { createApp } from \\\'vue\\\' import App from \\\'./App.vue\\\' import router from \\\'./router\\\' imp

    2024年02月20日
    浏览(32)
  • vue2 - 详细介绍element UI中在el-select嵌套el-tree树形控件实现下拉选择树型结构数据的效果实例(组件封装)

    在项目上常用使用到 el-select 和 el-tree 组合实现,记录下两者结合的实现过程。(代码以及注释清晰明了,代码直接使用即可) 要求根据项目接口提供的数据,el-tree 里的数据是一次性返回来的,点击最后一层级时,请求接口,在点击层级下方追加数据追加的数据要显示勾

    2024年04月15日
    浏览(43)
  • Vue全局组件和局部组件的注册

      组件的简介 : 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 组件的基本使用: 创建一个Vue实例需要创建后才能使用,组件也需要进行注册后才能使用。注册

    2023年04月23日
    浏览(36)
  • Vue中的全局组件与局部组件

    聚沙成塔·每天进步一点点 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏!创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的学习。每篇文章都致力于提供清晰、深入的参考资料,让你能够更轻松、更自信地理解和掌握 Vue.js 的核心概念和技术。订

    2024年01月17日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包