龙空技术网

vue中组件的封装,组件间的传值

魔法小白呀哈哈 573

前言:

目前咱们对“封装vue组件需要注意什么”都比较看重,看官们都想要知道一些“封装vue组件需要注意什么”的相关资讯。那么小编也在网上汇集了一些关于“封装vue组件需要注意什么””的相关内容,希望小伙伴们能喜欢,兄弟们一起来了解一下吧!

组件

把某个界面或者说某个小功能,封装起来就叫组件(就是对html css js的一个综合封装),组件也是Vue的实例,所以它也有自己的data和methods以及生命周期钩子等

组件开发特点:可复用,同时会简化代码结构,易于维护,同时利于多人协同开发等。

$nextTick

setTimeout高级版本 离它最近的一个dom刷新

单文件组件

template html 唯一的元素包住

js

css 导入 @import url(路径)

组件中引入其它组件

组件的使用三步

1:导入组件

import 自定义的一个组件名 from "组件路径";

注意点,这里组件路径就算是当前同一目录也最好加上"./组件名",不然会报错

2:注册组件

组件的使用是需要注册的,注册方式为:

export default {  components: {    组件名,     //注册的组件都写在components对象下。  }}

3:使用组件(写到相应html位置即可)

<组件名></组件名>   //该组件名来自于在组件注册时的组件名<template>  <div class="main">    <!-- 使用组件  -->    <!-- 在这index.vue是父组件,top,middle,bottom是子组件 -->    <!-- top与middle是兄弟组件 -->    <top></top>    <middle></middle>    <bottom></bottom>  </div></template><script>// 导入组件  这里面top,middle,bottom是需要另外创建的vue组件,这里是没创建的import top from "./top.vue";import middle from "./middle.vue";import bottom from "./bottom.vue";​export default {  // 组件注册  components: {    top, //相当于top:top    middle,    bottom  }};</script><style>.main {  width: 100%;}.main img {  width: 100%;}</style>

我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取

组件间的传值

如果A组件中引入了B组件 ,这样我们称A组件为父组件,B为子组件

父组件传值给子组件

在子组件标签上定义一个ref属性

<组件名 ref="xxx"></组件名>
在需要给子组件传值的地方写入:

this.$refs.xxx   //这就代表了子组件xxx的vue实例//这里xxx代码标签中定义的ref属性名这里就可访问到子组件里面的data属性与methods方法//如要修改子组件里面data里的某个值:          this.$refs.xxx.子组件里data属性名//如果需要调用子组件里面methods里某个方法:   this.$refs.xxx.子组件里面methods里方法名  

子组件传值给父组件

this.$parent    //这就代表父组件的vue实例    //如要修改父组件里面data里的某个值:         this.$parent.父组件里data属性名    //如果需要调用父组件里面methods里某个方法:   this.$parent.父组件里面methods里方法名   

注意:ref获取到的dom信息在这里与document.getElementById是有本质 区别的

//两个组件,这个是father.vue<template>  <div>    <button @click="btnClick">点我获取数据</button>    <div>你选中的当前歌曲:{{localSong}}</div>    <son ref="son" id="son"></son>  </div></template><script>// 组件使用,导包,注册,使用//1:导包import axios from "axios";import son from "./son.vue";export default {  data() {    return {      songs: [],      localSong: ""    };  },    //2:注册  components: {    son  },  methods: {    btnClick() {      window.console.log("ref访问:", this.$refs.son.$el);      window.console.log("原生访问:", document.getElementById("son"));      //要调接口,是不是要使用axios      //装包,导包,用包      axios({        url:          "神话&_t=" + Math.random() * 100      }).then(res => {        //   父组件传递子组件值,在子组件上定义一个ref,通过this.$refs.名字,我们就能访问子组件的实例,也就是可访问子组件data属性与methods方法        this.$refs.son.songs = res.data.result.songs;        this.$refs.son.alertEvent();        window.console.log(res.data.result.songs);      });    }  }};</script><style></style>//son.vue<template>  <ul>    <li v-for="(item, index) in songs" :key="index" @click="liCLick(item.name)">{{item.name}}</li>  </ul></template><script>// 子组件访问父组件里的data与methods更简单,只需要this.$parent就够了export default {  data() {    return {      songs: []    };  },  methods: {    liCLick(name) {      this.$parent.localSong = name;      window.console.log("访问父组件:", name, this.$parent);    },    alertEvent() {      alert(123);    }  }};</script><style></style>

总结:

父传子

定义: 标签上定义一个ref=值使用 this.$refs.值 //返回子级this

子传父

this.$parent //返回父级this创建脚手架

//这里项目名不要有中文,不要有大写字母,不要搞特殊符号,尽可能有意义 ,像普通变量命名一样vue create 项目名      

原文链接:

作者:ff186345

标签: #封装vue组件需要注意什么 #vue封装组件的原则