vue学习之组件

vue官方文档中定义组件通过调用Vue.component方法,一般没使用

定义组件

一个组件为一个vue文件,包含template(必须有),script,style三部分

//com.vue<template lang="html">
  <div>//只能有一个html标签包裹里面所有节点
   child component{{name}}
  </div>
</template>
<script>
    export default{
    data(){//data部分必须是个函数,返回一个对象。当前组件可以使用data里面的数据      return {           name:‘com‘     }}

}
</script>
<style lang="css">
</style>

引用组件

比如在App.vue中引用上面的com.vue,三步:import组件,在components里注入,在template使用

<template>
  <div id="app">
     <com></com>
  </div>
</template>

<script>
import com from "./components/com.vue"
export default {
  name: ‘App‘,
  components:{
    com  }
}
</script>

什么叫做父子组件

上面例子中,App.vue的components上挂载了component这个组件,其中App.vue是父组件,component是子组件。

父子组件如何通信

在子组件中声明props,接收父组件传过来的数据。

ps:props数据传递是单向的,只能从外到里传递。

<template lang="html">
  <div>
    年龄:{{age}}
    名称:{{name}}
  </div>
</template>
<script>
    export default{
      props:[‘age‘],
      data(){
        return{
          name:‘com‘
        }
      }
    }
</script>
<style lang="css">
</style>

在父组件中传递age这个数据:(可以传递静态数据或者动态数据)

<template lang="html">
  <div>
    <com age="19"></com>//静态数据    <com :age="ageNum"></com>//动态数据:变量
  </div>
</template>
<script>
  import com from "./components/com.vue"
  export default{
    components: {
      com
    },
    data(){
      return {
        ageNum: 18
      }
    }
  }
</script>
<style lang="css">
</style>

自定义事件

通过自定义事件,可以将子组件的数据发送到父组件。自定义事件使用$emit。比如下面,点击子组件的这个按钮(子组件接收的用户行为),触发父组件自定义的patch事件,执行patch事件的处理函数msg3,改变父组件的ageNum数据

在子组件中代码:

<button type="button" name="button" @click="$emit(‘patch‘,[参数])">发送到父组件</button>

父组件中代码:

<com :age="ageNum" @patch=‘msg3‘></com>//动态数据:变量
export default{    data(){      return {        ageNum: 18      }    },  methods: {  msg3(params){     //params:子组件传递过来的参数     this.ageNum++  } }}

插槽slot

除了前面传递变量改变组件,slot给组件定义了一个插槽,根据组件的使用者,可以在slot处插入其他的内容,使组件具有更大的灵活性,达到动态改变组件的目的。

比如有这么个需求,一个组件中,有body部分,有footer部分,而不同页面引用这个组件,需要用不同的footer,这是时候,这个footer部分,就可以用slot来实现。

如何使用插槽

子组件中

<template lang="html">
  <div>   <slot name="a"></slot>
  <button type="button" name="button" @click="$emit(‘patch‘,[参数])">发送到父组件</button>
   <slot name="b"></slot>
  </div>
</template>

父组件中

<template lang="html">
  <div>
    <com age="19">    <h1 slot="a">加在子组件slot的name为a的位置处</h1>       <h1 slot="b">加在子组件slot的name为b的位置处</h1>    </com>//静态数据
  </div>
</template>

原文地址:https://www.cnblogs.com/yaoyao-sun/p/10363246.html

时间: 2024-10-02 19:35:09

vue学习之组件的相关文章

Vue学习之组件切换及父子组件小结(八)

一.组件切换: 1.v-if与v-else方式: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv=&q

Vue 学习(组件相关)

实现组件三个步骤 组件构造器,Vue.extend(). 这个相当于模板,模板是干什么的呢?理解为 你看到的都是这货渲染出来的,它里面有data,template之类的 注册组件,Vue.component("name",module).这货相当于打标签,上一步创建的,他给命名,第二个参数如果是对象的话,可以省去第一步 挂载组件 注册全局组件 Vue.component("my-component",{ //选项 }) 局部组件 var Child={ templa

Vue学习之组件小结(七)

一.组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用相应的组件即可. 二.组件和模块: 1.模块化:是从代码逻辑的角度进行划分的:方便代码分层开发,保证每个功能模块的只能单一: 2.组块化:是从UI界面的角度进行划分的:前端的组块化,方便UI组件的重用. 三.定义全局组件的方式: 三种方式: <!DOCTYPE html> <html lang="en"> <head

vue 学习一 组件生命周期

先上一张vue组件生命周期的流程图 以上就是一个组件完整的生命周期,而在组件处于每个阶段时又会提供一些周期钩子函数以便我们进行一些逻辑操作,而总体来讲 vue的组件共有8个生命周期钩子 beforeCreate 实例创建前 create 实例创建后 beforeMount dom挂载前 mounted dom挂载后 beforeUpdate 数据更新前 updated 数据更新后 beforeDestroy 组件实例销毁前 destroyed 组件实例销毁后 每一个生命周期,vue做的事情不同,

45.VUE学习之--组件之父组件使用scope定义子组件模板样式结构实例讲解

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!--<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>--> <script type="text/javascript"

## vue学习笔记--简单父子组件--

## vue学习笔记 ### 组件之间的通讯1. 父组件到子组件```js //father <div> <son msg="父组件的信息写在这"></son> <son title="title"></son> <!--:title--> </div> <script> export default { data(){ return { title: '当传递一个变量过

Vue学习笔记入门篇——组件的使用

本文为转载,原文:Vue学习笔记入门篇--组件的使用 组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 组件使用 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options).组件在注册之后,便可以在父实例的模块中以自定义元素 的形式使用.

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

Vue学习笔记入门篇——组件的通讯

本文为转载,原文:Vue学习笔记入门篇--组件的通讯 组件意味着协同工作,通常父子组件会是这样的关系:组件 A 在它的模版中使用了组件 B.它们之间必然需要相互通信:父组件要给子组件传递数据,子组件需要将它内部发生的事情告知给父组件.然而,在一个良好定义的接口中尽可能将父子组件解耦是很重要的.这保证了每个组件可以在相对隔离的环境中书写和理解,也大幅提高了组件的可维护性和可重用性.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props 向下传递