Vue学习Day6 插槽slot使用、编译作用域、作用域插槽、模块化开发、webpack介绍、安装

想利用暑假时间好好学习一下vue,会记录每一天的学习内容。
今天是学习vue的第6天!

起起伏伏乃人生常态,继续加油~


学习内容

  • 1. 插槽slot
    • slot基本使用
    • 具名插槽slot
  • 2. 编译作用域
  • 3. 作用域插槽
  • 4.模块化开发
    • CommonJs (了解)
  • 5.ES6模块化的导入和导出
    • export 使用
    • import使用
  • 6.Webpack介绍
    • 和grunt/gulp的对比
  • 7. Webpack安装


1. 插槽slot

生活中很多地方都有插槽,电脑的USB插槽,插板当中的电源插槽
插槽的目的是让我们原来的设备具备更多的扩展性

组件的插槽:

  • 组件的插槽也是为了让我们封装的组件更加具有扩展性
  • 让使用者可以决定组件内部的一些内容到底展示什么

如何封装这类组件呢?

  • 它们有很多区别,也有很多共性

如何封装合适呢?抽取共性,保留不同

  • 最好的封装方式是将共性抽取到组件中,将区别暴露为插槽
  • 一旦我们预留了插槽,就可以让使用者根据自己的需求,决定插槽中插入什么内容

slot基本使用

如何使用slot

  • 在子组件中,使用特殊的元素可以为子组件开启一个插槽
  • 该插槽插入什么内容取决于父组件如何使用

我们通过一个简单的例子,来给子组件定义一个插槽:

  • 中的内容表示:如果没有在该组件中插入任何其他内容,就默认显示该内容
  • 有了这个插槽,父组件如何使用呢?

Vue学习Day6 插槽slot使用、编译作用域、作用域插槽、模块化开发、webpack介绍、安装_第1张图片
Vue学习Day6 插槽slot使用、编译作用域、作用域插槽、模块化开发、webpack介绍、安装_第2张图片


具名插槽slot

当子组件的功能复杂时,子组件的插槽可能并非是一个

  • 比如我们封装一个导航栏的子组件,可能就需要三个插槽,分别代表左边、中间、右边
  • 那么,在给插槽插入内容时,我们需要区分插入的是哪一个插槽
  • 这时,需要给插槽起一个名字

如何使用具名插槽呢?

  • slot元素添加一个name属性

Vue学习Day6 插槽slot使用、编译作用域、作用域插槽、模块化开发、webpack介绍、安装_第3张图片Vue学习Day6 插槽slot使用、编译作用域、作用域插槽、模块化开发、webpack介绍、安装_第4张图片
在这里插入图片描述


2. 编译作用域

Vue学习Day6 插槽slot使用、编译作用域、作用域插槽、模块化开发、webpack介绍、安装_第5张图片
可以渲染出来,也就是使用的是Vue实例的属性

为什么呢?

  • 官方给出了一条准则:
    父组件模版的所有东西都会在父级作用域内编译;
    子组件模版的所有东西都会在子级作用域内编译
  • 我们在使用时,整个组件的使用过程是在父组件Vue实例的模版中出现的
  • 那么他的作用域就是父组件使用的属性也是属于父组件的属性
  • 因此,isShow使用的是Vue实例中的属性,而不是子组件的属性

比如:

<div id="app">
	<cpn v-show="isShow"></cpn>
	<cpn v-for="item in names"></cpn>
</div>

查找isShownames变量,会看其是在哪一个模版中使用的,这里就是在属于Vue实例的模版中使用,那么就会在Vue实例中查找isShownames变量。这里的isShownames变量就是在Vue实例的作用域内

<template id="cpn">
	<div>
		<h2>我是子组件</h2>
        <p v-show="isShow">我是内容</p>
	</div>
</template> 

此处查找isShow变量,则会在该模版(id=“cpn”)对应的组件中查找


3. 作用域插槽

父组件替换插槽标签,但是内容由子组件来提供
我们先提一个需求:

  • 子组件中包含一组数据,比如:
    pLanguages: ['JavaScript', 'c++', 'Python', 'Java', 'c#', 'Swift']
  • 需要在多个页面进行展示:
    • 某些页面是以水平方向展示的
    • 某些页面是以列表形式展示的
    • 某些页面直接展示一个数组…
  • 数据在子组件,但是希望父组件告诉我们如何展示,但是父组件不能直接拿到子组件中的数据,怎么办呢?
    • 使用slot作用域插槽

为了让 data 在父级的插槽内容中可用,我们可以将data作为 元素的一个属性绑定上去:
绑定在 元素上的属性被称为插槽 prop
Vue学习Day6 插槽slot使用、编译作用域、作用域插槽、模块化开发、webpack介绍、安装_第6张图片
在父组件使用我们的子组件时,从子组件如何拿到数据:
我们通过