IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 内容分发和props类型 -> 正文阅读

[JavaScript知识库]内容分发和props类型

作者:recommend-item-box type_blog clearfix

一、props类型限制??

如果prop是一个对象,不是字符串数组时,它包含验证:

验证类型:String、Number、Boolean、Function、Object、Array

 props: {
    // 基础类型检测,(‘null’意思是任何类型都可以),在传参值后加上类型,会自动判断,会限制传的值的参数类型.
    propsA: Number,
    //多种类型,并列排序
    propsB: [String, Number],
    // 必传且是字符串
    propsC: {
      type: String,
      required: true,
    },
    // 数字,有默认值
    propsD: {
      type: Number,
      default: 100
    },
  },
  react:中的是.number.isRequired(必须写的)

二、内容分发

为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板。这个过程被称为内容分发。

简单来说,假如父组件需要在子组件内放一些DOM, 那么这些DOM是显示、不显示、在哪个地方显示、如何显示,就是slot分发负责的活

vue使用特殊的<slot>元素作为原始内容的插槽

例如默认情况下父组件在子组件内套的内容, 是不显示的。

使用单个插槽(slot) 可以将父组件放在子组件的内容。

注:即使有多个标签,会一起被插入,相当于用父组件放在子组件里的标签,替换了<slot></slot>这个标签。

多个插槽叫做具名slot:

具名slot:被分发的内容的作用域,根据其所在模板决定,受父组件所控制。

index.html:

<!doctype html>
<html>

<head>
  <title>VUE练习</title>
  <link rel="stylesheet" href="./css/index.css" type="text/css">
</head>

<body>
  <div id="e">
    <App message="我是父亲的值" v-on:addclick="getnum">
      <i slot="titles">我是头部</i>
      <b slot="info">我是内容</b>
      我是其他的内容
    </App>
    <App1 v-bind:message1="sum"></App1>
    <App2></App2>
    <App3></App3>
    <App4></App4>
  </div>
  <script src="./bundle.js"></script>
</body>

</html>

App.vue:

<template>
  <div class="app1">
    <p>
      <!-- 分发 -->
      <slot name="titles"></slot>
      我是父亲的内容:
      <slot name="info"></slot>
      <!-- 具名分发 -->
      <slot></slot>
    </p>
    <!-- <input type="button" value="加一" v-on:click="add" /> -->
  </div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      text: "",
      num: 0,
    };
  }, //?????required:?true,

  // ?type:?String,
  props: {
    message: Number,
  },
  methods: {
    add: function () {
      this.num++; //儿子自己计算num值
      this.$emit("addclick", this.num); //通过emit调用父亲传来的自定义事件,把儿子计算后num作为参数传给父亲
    },
  },
};
</script>

<style scoped>
.app1 {
  width: 100%;
  height: 100px;
  background: rgb(240, 141, 141);
}
</style>

最终效果图:

三、Keep-alive:

重新创建动态组件的行为通常是非常有用的,但是在这个案例中,我们更希望那些标签的组件实例能够被在它们第一次被创建的时候缓存下来。为了解决这个问题,我们可以用一个?<keep-alive>?元素将其动态组件包裹起来。

<!-- 失活的组件将会被缓存!-->

<keep-alive>

??<component v-bind:is="currentTabComponent">

</component>

</keep-alive>

缺点:占缓存,浪费缓存。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:32:00  更:2021-07-31 16:33:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 1:30:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码