冇事来学系--Vue2.0 组件开发详讲(下)

简介: 组件的自定义属性propsprops节点是和data、methods等同级的节点,值是一个数组

组件的自定义属性props


props节点是和data、methods等同级的节点,值是一个数组

<script>
  // 基本语法
  export default {
    // 组件的自定义属性,允许自定义当前组件指定数据的初始值
    props: ['自定义的属性A','自定义的属性B','其他自定义的属性...'],
    // 组件的私有数据
    data(){
      return{
        // 数据
      }
    }
  }
</script>


使用方法:

  1. 在封装组件的时候上写一个props节点,并且设置一个自定义的属性

网络异常,图片无法展示
|

通过打印this会发现,this指向当前Vue组件的实例,init是对象里面的一个属性,因此可以通过this.init访问

  1. 使用上面的组件的时候,在标签内为上面自定义的属性设置属性值,即是为这个组件指定了一个初始值(注意:指定的这个值是字符串


网络异常,图片无法展示
|

只需要在设置自定义属性的时候,使用v-bind绑定属性,这样赋值的就是数字型(因为使用v-bind绑定属性时,写的是js代码,js代码中的字符串要加引号,即" '9' ")

网络异常,图片无法展示
|

  1. 在封装的组件上将要使用的初始值渲染到指定的位置

网络异常,图片无法展示
|

props中的数据,可以直接在模板结构中被使用


注意!props节点设置的数据是"只读"的!(可以修改成功,但是会报错)。若想修改props节点里面数据的值,可以将props里面的数据转存到data节点里面,因为data节点里面的数据都是可读可写的(props节点只负责设置初始值,改写的数据是data里面的数据)


props的default默认值

在声明自定义属性时,可以通过default来定义属性的默认值

<script>
  export default {
    props: {      // 注意这里的props节点里面指向的是 对象 而不是数组
      init: {     // 自定义属性init,指向一个配置对象
        // 用default属性定义 自定义属性的默认值
        default: 0
        // 若外界使用该组件的时候没有传入init属性的值,则默认值生效,为0
      }
    }
  }
</script>


props的type值类型


在声明自定义属性时,可以通过type来定义属性的值类型

<script>
  export default {
    props: {
      init{
        // default属性 定义自定义属性的默认值
        default: 0,
        // 用type属性 定义自定义属性的值类型
        // 如果传递过来的值不符合此类型,则会在终端报错
        type: Number    // init的值类型必须是Number数字型
      }
    }
  }
</script>

props的required必填项

必填项校验required设置为true,则在使用组件的时候自定义属性必须传值,否则就报错 (即使有默认值也会报错)

非单文件组件和单文件组件


非单文件组件:一个文件中包含n个组件 ---> a.html

单文件组件:一个文件中只包含一个组件 ---> a.vue

<!-- 准备一个容器 -->
<div id="#root">
  <student></student>
</div>
<script>
  // 1、创建student组件 Vue的extend方法
  const student = Vue.extend({
    name: 'student',        // 创建组件时的name属性指定组件在 开发者工具 中呈现的名字
    template: `
      <div></div>
    `,      // template节点,配置组件的HTML结构,必须要有div容器(用模板字符串写比较方便)
    data(){           // 数据必须使用函数写法
      return {}       // return返回一个数据对象
    },
    methods: {}
  })
  // 简写方法 省略了Vue的extend方法
  const student = {}
  // 2、注册组件,在vm实例中(局部组件)
  const vm = new Vue({
    el: '#root'
    components: {       // 注册组件,components节点
      student // studnet: student简写   注册的时候写的什么名字,使用的时候就要写什么名字
    }
  })
  // 3、使用组件则直接写组件标签<student></student>
  // 注册全局组件  在vm实例外
  // Vue.component('组件名称', 组件)   
  Vue.component('std', student)
</script>


组件的嵌套


在一个组件中注册和使用另一个组件,这就有了父子关系

<body>
  <div id="root">
    <!-- 使用组件 -->
  </div>
  <script>
    // 定义student组件    子组件必须定义在父组件之前,不然报错
    const student = new Vue.extend({
    name: 'student',        // 创建组件时的name属性指定组件在开发者工具中呈现的名字
    template: `
      <div>
        <h2>学生名称:{{name}}</h2>
        <h2>学生年龄:{{age}}</h2>
      </div>
    `,      // template节点,配置组件的HTML结构,必须有div容器(用模板字符串写比较方便)
    data(){           // 数据必须使用函数写法
      return {
        name: '张三',
        age: 18
      }       // return返回一个数据对象
    }
  })
    // 定义school组件
    const school = new Vue.extend({
    template: `
      <div>
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
        <student></student>     <!-- 子组件的使用也要在父组件中 -->
      </div>
    `,      // template节点,配置组件的HTML结构,必须有div容器(用模板字符串写比较方便)
    data(){           // 数据必须使用函数写法
      return {
        name: '叶集大学',
        address: '赛博坦'
      }       // return返回一个数据对象
    },
    components: {     // 子组件要注册在父组件里面
      student
    }
  })
    const vm = new Vue({
      el: '#root'
      components: {       // 注册组件,components节点
        school
      }
    })
  </script>
</body>


目录
相关文章
|
8月前
|
弹性计算 资源调度 搜索推荐
阿里云ECS中长期成本节省计划解析:从原理到实战,助力企业降本提效
阿里云ECS节省计划的推出为企业用户提供了一种全新的成本优化方案。通过一次性购买的方式享受长期按量付费的折扣权益,客户不仅可以大幅降低ECS资源的使用成本还可以享受更高的灵活性和便捷性。本文将从多个维度深入剖析阿里云ECS节省计划,包括其核心优势、详尽的购买使用指引、与传统付费模式的全面对比,以及一客户成功案例,以供大家了解和参考。
|
存储 监控 数据可视化
双十一线上服务调用链路追踪SkyWalking实战分析
【11月更文挑战第27天】随着电商行业的飞速发展,双十一购物节已成为全球最大的购物狂欢节之一。在双十一期间,电商平台需要处理海量的用户请求和订单,这对系统的稳定性和性能提出了极高的要求。为了确保系统在高并发环境下的稳定运行,对线上服务的调用链路进行追踪和分析显得尤为重要。本文将通过实战案例,详细介绍如何在双十一期间使用SkyWalking对线上服务进行调用链路追踪,并结合Seata实现分布式事务管理,从而保障系统的稳定性和性能。
374 6
|
SQL 运维 关系型数据库
will be dropped if server is in r-o mode问题解决
【6月更文挑战第26天】will be dropped if server is in r-o mode问题解决
407 2
|
设计模式 开发者 Python
深入理解Python适配器模式及其应用示例
在软件开发中,适配器模式是一种常用的设计模式,它可以帮助我们解决不兼容的接口或类之间的问题。通过适配器模式,我们可以简化不兼容接口之间的调用,并提高代码的复用性和可维护性。这两个支付接口具有不同的接口定义和调用方式,为了屏蔽这种差异性并实现统一的支付接口,可以使用适配器模式来完成。通过适配器模式,我们成功地将支付宝和微信支付的接口适配到了统一的支付接口上,实现了支付系统的可扩展性和灵活性。适配器模式的核心思想是创建一个中间层,将不同的接口进行适配,使得接口之间可以无缝衔接并协同工作。
233 2
|
监控 安全 Linux
【权限维持】Linux&OpenSSH&PAM后门&SSH软链接&公私钥登录
【权限维持】Linux&OpenSSH&PAM后门&SSH软链接&公私钥登录
377 2
|
程序员 编译器 C++
C++中的函数重载(Function Overloading)
C++中的函数重载(Function Overloading)
475 2
|
设计模式
实现生成工厂代码,实现热加载
实现生成工厂代码,实现热加载
|
机器学习/深度学习 自然语言处理 JavaScript
Copilot概述
Copilot概述
445 0
|
JavaScript 算法 前端开发
常用加密算法及实现原理
常用加密算法及实现原理
374 0
|
JavaScript 前端开发 Java
java的URLEncoder.encode() 疑问与解惑
本文是博主学习java的记录,希望对大家有所帮助。
499 0
java的URLEncoder.encode() 疑问与解惑