Vue前端框架10 组件的组成、组件嵌套关系、组件的注册方式、组件传递数据(props $emit)、数组传递多种数据类型、组件传递props校验、组件事件

这篇具有很好参考价值的文章主要介绍了Vue前端框架10 组件的组成、组件嵌套关系、组件的注册方式、组件传递数据(props $emit)、数组传递多种数据类型、组件传递props校验、组件事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、组件组成

组件最大的优势就是可复用性
通常将组件定义在.vue中,也就是SFC单文件组件
组件的基本组成:

<template>
  <h3>基础标签</h3>
</template>

<script>
export default {
  name: "MyComponent"
}
</script>

<!-- scoped 让当前样式只在当前组件中生效-->
<style scoped>

</style>
<template>
<!--  第三步 显示组件-->
  <MyComponent/>
<!--  这样写法也可以-->
  <my-component></my-component>
</template>

<script>
//第一步 引入组件
import MyComponent from './components/MyComponent.vue'

export default {

  name: 'App',
  //第二步 注入组件
  components: {
    MyComponent
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

二、组件嵌套关系

组件允许我们将UI划分为独立的、可重用的部分,并且对每个部分单独思考
实际应用中组件常常被组件成层层嵌套的树状结构

三、组件的注册方式

Vue组件使用前要注册,注册有两种方式:全局注册和局部注册
全局注册在main.js中注册

import { createApp } from 'vue'
import App from './App.vue'
import MyComponent from "@/components/MyComponent";

const app=createApp(App)
/**
 * 在这中间写app的组件注册
 * 全局注册的问题:
 * 1、组件不管是否使用 都要打包在JS中
 * 2、全局在大型项目中使得项目依赖不明确,父组件中使用子组件时,不太容易定位子组件的实现,影响长期的可维护性
 */

app.component("MyComponent",MyComponent)

app.mount('#app')

局部注册按照之前的来就好了

四、组件传递数据(通过props)

组件之间不是完全独立的,而是有交集的,组件与组件之间可以传递数据
传递数据的解决方案就是props

<template>
  <h3>{{title}}</h3>
  <h3>{{demo}}</h3>
<!--  动态传-->
  <h3>{{message}}</h3>
<!--  注意事项 props传递数据 只能从父传给子 不能方向传-->
</template>

<script>
export default {
  name: "sonDemo",
  props:["title","demo","message"]
}
</script>

<style scoped>

</style>
<template>
  <Son title="Parent数据" demo="测试" :message="message"/>
</template>

<script>
import Son from "@/components/sonDemo";
export default {
  name: "parentDemo",
  components: {Son},
  data(){
    return{
      message:"hello"
    }
  }
}
</script>

<style scoped>

</style>

五、组件传递多种数据类型

props不仅仅可以传字符串 还可以传其他类型 例如数字、对象、数组
任何类型都可以用props传

<template>
<!--  在这里传值 可以静态传值 也可以动态传值-->
  <Son title="Parent数据" demo="测试" :message="message" :age="age" :names="names" :user="user"/>
</template>

<script>
import Son from "@/components/sonDemo";
export default {
  name: "parentDemo",
  components: {Son},
  data(){
    return{
      message:"hello",
      age:18,
      names:["zhansgan","lisi"],
      user:{
        name:"hello",
        age:20
      }
    }
  }
}
</script>

<style scoped>

</style>
<template>
  <h3>{{title}}</h3>
  <h3>{{demo}}</h3>
<!--  动态传-->
  <h3>{{message}}</h3>

  <button @click="clickAgain">click</button>
<!--  注意事项 props传递数据 只能从父传给子 不能方向传-->
</template>

<script>
export default {
  name: "sonDemo",
  //接受传到的值
  props:["title","demo","message","names","age","user"],
  methods:{
    clickAgain(){
      console.log(this.names)
      console.log(this.user)
    }
  }
}
</script>

<style scoped>

</style>

六、组件传递props校验

<template>
<!--  在这里传值 可以静态传值 也可以动态传值-->
  <Son title="Parent数据" demo="测试" :message="message" :age="age" :names="names" :user="user"/>
</template>

<script>
import Son from "@/components/sonDemo";
export default {
  name: "parentDemo",
  components: {Son},
  data(){
    return{
      message:"hello",
      age:18,
      names:["zhansgan","lisi"],
      user:{
        name:"hello",
        age:20
      }
    }
  }
}
</script>

<style scoped>

</style>
<template>
  <h3>{{title}}</h3>
  <h3>{{demo}}</h3>
<!--  动态传-->
  <h3>{{message}}</h3>
  <h3>{{age}}</h3>

  <p v-for="(item,index) of names" v-bind:key="index">{{item}}</p>

  <button @click="clickAgain">click</button>
<!--  注意事项 props传递数据 只能从父传给子 不能方向传-->
<!--  注意:prop是已读的 不可以修改-->
</template>

<script>

export default {
  name: "sonDemo",
  //接受传到的值
  props: {
    title:{
      type:String,
      //设置这是必选项
      required:true
    },
    names:{
      type:[String,Number,Array,Object],
      //如果传的是个数组类型或对象类型 则需要通过工厂函数返回默认值
      default(){
        return ["1",'2']
      }
    },
    age:{
      type:Number,
      //可以设置默认值
      //数字和字符串可以直接default 如果传的是个数组类型或对象类型 则需要通过工厂函数返回默认值
      default:0
    },
    user:{},
    demo:{},
    message:{}
  },
  methods:{
    clickAgain(){
      console.log(this.names)
      console.log(this.user)
    }
  }
}
</script>

<style scoped>

</style>

七、组件事件

组件的模板表达式中,可以直接用$emit方法触发自定义事件
触发自定义的目的是组件之间传递数据文章来源地址https://www.toymoban.com/news/detail-709554.html

<template>
  <h3>组件事件</h3>
  <son-demo @someEvent="getHandle"></son-demo>
  <p>{{message}}</p>
</template>

<script>
import SonDemo from "@/components/sonDemo";
export default {
  name: "parentDemo",
  components: {SonDemo},
  methods:{
    getHandle(data){
      console.log("触发了",data)
      this.message=data
    }
  },
  data(){
    return{
      message:""
    }
  }
}
</script>

<style scoped>

</style>
<template>
    <h3>Child</h3>
    <button @click="clickEventHandle">传递数据</button>
</template>
<!--组件之间传递数据的方案
  1、父传子  props
  2、子传父  自定义事件$emit
-->
<script>
export default {
  name: "sonDemo",
  methods:{
    clickEventHandle(){
      console.log("准备触发")
      //自定义事件 还可以传参
      this.$emit("someEvent",this.message)
    }
  },
  data(){
    return{
      message:"child数据123"
    }
  }
}
</script>

<style scoped>

</style>

到了这里,关于Vue前端框架10 组件的组成、组件嵌套关系、组件的注册方式、组件传递数据(props $emit)、数组传递多种数据类型、组件传递props校验、组件事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • vue - 动态绑定ref(使用变量)以及获取方式,解决v-for循环嵌套自定义子组件时无法this.$refs.xx找到动态组件的情况(详细示例教程)适合 vue.js nuxt.js uniapp

    正常情况,我们需要在vue中获得某个dom或者组件,我们会通过绑定 ref 然后通过绑定后的名字来获取这个dom 。 但是,如果我们在v-for中绑定ref的话,那么这个ref就会存在多个,比如我们点击事件让对应的显示/隐藏的话,我们很难找到这个对应的元素。 那么,这时我们需要动

    2024年02月13日
    浏览(30)
  • vue(32) : win10创建vue2基础前端框架

    vue2 element-ui axios 含接口调用示例 开发工具为HBuilderX 3.7.3 等待创建项目 代理后端配置如下, 三个test改成相同的uri前缀即可, uri该签注会代理到后端 proxy: {       // 代理test开头的uri       \\\'/test\\\': {         target: \\\'http://192.168.1.1:8080\\\', // 后端地址         changeOrigin: true, // 开启代

    2024年02月06日
    浏览(28)
  • Vue + Element UI 前端篇(十五):嵌套外部网页

    在有些时候,我们需要在我们的内容栏主区域显示外部网页。如查看服务端提供的SQL监控页面,接口文档页面等。 这个时候就要求我们的导航菜单能够解析嵌套网页的URL,并根据URL路由到相应的嵌套组件。接下来我们就讲解具体实现方案。 实现原理 1. 给菜单URL添加嵌套网页

    2024年02月08日
    浏览(28)
  • UIOTOS前端零代码 第7节:(实践)利用嵌套+收发器组件,零代码实现简单计算器功能

    通过嵌套容器嵌套底层页面,再利用收发器组件和工具函数之间的转换,真正做到零代码实现简单计算器功能。 底层页面             步骤1: 打开编辑器,在右边页面中,选择合适的页面路径 新建页面 。 步骤2: 把当前页面命名“按钮”,并缩放至合适的大小,在右边属

    2024年04月14日
    浏览(34)
  • 【一、bootstrap框架前端注册登录页面】

    一、使用bootstrap框架写一个简易的前端登录页面。 先上截图 下面开始记录本人使用bootstrap框架写这个登录页面的过程 1、bootstrap需要的配置文件  2、如何修改背景图片 3、如何写一个图标与输入框附合的表单 例如这样 

    2024年02月11日
    浏览(28)
  • Vue中使用Element UI的Table组件实现嵌套表格(最简单示例)

    以下是一个简单的示例代码,演示如何在Vue中使用Element UI的Table组件实现嵌套表格: 上面的代码通过type=\\\"expand\\\"设置了一个展开按钮,点击该按钮会显示与当前行关联的子表格内容。 在上面的示例中,我们定义了一个包含姓名和年龄的主表格,以及一个展开列用于显示与每行

    2024年02月02日
    浏览(37)
  • vue3深入组件: 组件注册

    一个 Vue 组件在使用前需要先被“注册”,这样 Vue 才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册。 全局注册 我们可以使用 Vue 应用实例的 .component() 方法,让组件在当前 Vue 应用中全局可用。 全局注册的问题: 全局注册,但并没有被使用

    2024年01月18日
    浏览(27)
  • Vue全局组件和局部组件的注册

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

    2023年04月23日
    浏览(32)
  • VUE工程化--vue组件注册

    组件注册的两种方式: 1. 局部注册:只能在注册的组件内使用 2. 全局注册:所有组件内都能使用   局部注册步骤:         1、导入         2、注册组件--注册成html标签(components中)         3、页面中使用标签 实现效果:   全局注册步骤( main.js ):         1、导入

    2024年01月18日
    浏览(25)
  • 前端框架Layui的使用讲解(Layui搭建登录注册页面)

    目录 一、前言 1.什么是Layui 2.Layui的背景 3.为什么要使用Layui 4.Layui的模块化 二、Layui使用讲解 1.初识Layui 2.搭建登录页面 静态效果图​ 封装引入文件页面(公用页面) jsp页面搭建 userDao编写 Servlet页面编写 xml文件配置 3.搭建注册页面 静态效果图 jsp页面搭建 Servlet页面编写 最

    2024年02月15日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包