插槽

认识slot

在生活中,很多地方都有插槽,电脑的USB插槽,插板中的电源插槽等。
插槽的目的是让我们原来的设备具备更多的扩展性。比如电脑的USB我们可以插入U盘、鼠标、键盘、硬盘、手机、音响等等。

组件的插槽

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

封装组件

如果我们每一个单独去封装一个组件,显然不合适:比如每一个页面都返回,这部分内容我们就要重复去封装。但是,如果我们封装成一个,好像也不合理有些左侧是菜单,有些是返回,有些中间是搜索,有些是文字,等等。

最好的封装方式是将共性抽取到组件中,将不同暴露为插槽。一旦我们预留了插槽,就可以让使用者根据自己的需要,决定插槽中插入什么内容,是搜索栏还是文字还是菜单,由调用者自己来决定。

插槽的基本使用:

<body>
<div id="app"><div><cpn></cpn><cpn><input type="text" placeholder="请输入内容"></cpn><cpn><i>嘿嘿</i></cpn></div>
</div><template id="cpn"><div><h2>我是组件</h2><p>我是组件,哈哈哈</p><slot><button>按钮</button></slot><!--默认为按钮--></div>
</template>
<script src="../js/vue.js"></script>
<script>const app = new Vue({el: '#app',data: {message: '你好啊',},components: {cpn: {template: '#cpn'}}})
</script>
</body>


相似的内容要插入不同的元素,只要使用slot便可以获得效果,节省了代码量。
如果有多个值,同时放入到组件进行替换时,一起作为替换元素。

具名插槽的使用

当子组件的功能复杂时,子组件的插槽可能并非是一个。比如我们封装一个导航栏的子组件,可能就需要三个插槽,分别代表左边、中间、右边。那么,外面在给插槽插入内容时,如何区分插入的是哪一个呢?这个时候,我们就需要给插槽起一个名字。

<body>
<div id="app"><cpn><button slot="left">按钮</button></cpn>
</div><template id="cpn"><div><slot name="left"><span>左边</span></slot><slot name="center"><span>中间</span></slot><slot name="right"><span>右边</span></slot></div>
</template>
<script src="../js/vue.js"></script>
<script>const app = new Vue({el: '#app',data: {message: '你好啊',},components: {cpn: {template: '#cpn'}}})
</script>
</body>

结果:

作用域插槽

父组件替换插槽的标签,但是内容由子组件来提供。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="app"><cpn></cpn><cpn><template slot-scope="slot"><span v-for="item in slot.data">{{item}} -- </span><br><span>{{slot.data.join(' - ')}}</span></template></cpn>
</div><template id="cpn"><div><slot :data="pLanguages"><ul><li v-for="item in pLanguages">{{item}}</li></ul></slot></div>
</template>
<script src="../js/vue.js"></script>
<script>const app = new Vue({el: '#app',data: {message: '你好啊',},components: {cpn: {template: '#cpn',data() {return {pLanguages: ['JavaScript','Python','Swift','Go','C++']}}}}})
</script>
</body>
</html>

结果:

webpack

webpack的介绍和安装

从本质上来讲,webpack是一个现代的JavaScript应用的静态模块打包工具。
在ES6之前,我们要想进行模块化开发,就必须借助于其他的工具,让我们可以进行模块化开发,并且在通过模块化开发完成了项目后,还需要处理模块间的各种依赖,并且将其进行整合打包。而webpack其中一个核心就是让我们可能进行模块化开发,并且会帮助我们处理模块间的依赖关系。不仅仅是JavaScript文件,我们的CSS、图片、json文件等等在webpack中都可以被当做模块来使用。

安装
安装webpack首先需要安装Node.js,Node.js自带了软件包管理工具npm
1、查看自己的node版本(需要大于8.9)

2、全局安装webpack

webpack的使用

创建dist和src目录,分别放置打包后的文件和源码,编写main.js

const {add,mul} = require('./mathUtils.js')console.log(add(20,30))
console.log(mul(20,30))import {name,age,height} from "./info";console.log(name);
console.log(age);
console.log(height);

编写mathUtils.js

function add(num1,num2) {return num1+num2;
}
function mul(num1,num2) {return num1*num2
}
module.exports = {add,mul
}

编写info.js

export const name = 'why';
export const age = 18;
export const height = 1.88;

将main.js进行打包
在index中导入打包后的文件
结果:

webpack中使用css文件的配置

loader

loader是webpack中一个非常核心的概念。
我们主要是用webpack来处理我们写的js代码,并且webpack会自动处理js之间相关的依赖,但是,在开发中我们不仅仅有基本的js代码处理,我们也需要加载css、图片,也包括一些高级的将ES6转成ES5代码,将TypeScript转成ES5代码,将scss、less转成css,将.jsx.vue文件转成js文件等等。
loader使用过程:
步骤一:通过npm安装需要使用的loader
步骤二:在webpack.config.js中的modules关键字下进行配置

使用loader打包css样式
编写css样式:

body {background-color: red;
}

将它放入入口文件中:
使用webpack命令
失败,因为未安装loader,下载loader:
npm install --save-dev css-loader
再进行配置:
页面也不会变红,原因是css-loader只负责将css文件进行加载,需要添加style-loader(更多loader请看官网),先下载style-loader,再添加配置

webpack图片文件处理

1、下载url-loader
2、配置

{test: /\.(png|jpg|gif)$/,use: [{loader: 'url-loader',options: {limit:31000}}]}

3、webpack打包
4、打开网页

ES6语法转ES5

1、下载babel
npm install --save-dev babel-loader@7 babel-core babel-preset-es2015
2、配置webpack.config.js文件

{test: /\.js$/,exclude: /(node_modules|bower_components)/,use: {loader: 'babel-loader',options: {presets: ['es2015']}}}

3、再次打包

webpack使用vue配置

1、下载vue
npm install vue --save
2、入口函数中引入vue

import Vue from 'vue'
const app = new Vue({el: '#app',data: {message: 'Hello Webpack'}
})

3、在网页中配置

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="app">{{message}}</div>
<script src="./dist/bundle.js"></script>
</body>
</html>

4、取消runtime-only,设置为runtime-complier,在webpack.config.js中配置

resolve: {alias: {'vue$': 'vue/dist/vue.esm.js'}}

第四天:Vue组件的slot以及webpack相关推荐

  1. 四、Vue组件化开发学习笔记——父子组件通信,父级向子级传值(props),子级向父级传值(自定义事件),slot插槽

    一.父子组件的通信 在上一篇博文中,我们提到了子组件是不能引用父组件或者Vue实例的数据的. 但是,在开发中,往往一些数据确实需要从上层传递到下层: 比如在一个页面中,我们从服务器请求到了很多的数据. ...

  2. 【Vue2-尚硅谷四】Vue ---ajax---插槽slot

    文章目录 4.1,vue脚手架配置代理 方法一 方法二 4.2,GitHub搜索案例 入口main.js App.vue Search.vue List.vue 4.3,slot插槽 4.3.1,默认 ...

  3. 【视频】vue组件之slot插槽

    P11vue组件之slot插槽 https://www.bilibili.com/video/av91679349?p=11

  4. 四、Vue项目去哪儿网首页推荐和周末游组件并使用Axios获取数据

    文章目录 在码云创建index-recommended分支 在Home.vue中引用Recommend.vue组件和Weekend.vue组件 Recommend.vue组件 Weekend.vue组 ...

  5. vue组件之具名slot 的分类案例

    需求说明: 利用组件的复用完成美食.游戏.电影的分类布局. 使用具名slot完成分类组件的不同内容显示. 实现过程: 1.创建一个分类子组件(Category.vue),在子组件中定义具名插槽: &l ...

  6. 【VUE3】保姆级基础讲解(二)计算属性,vue组件,vue-cli脚手架,组件通讯,插槽slot

    目录 计算属性computed 侦听器watch 对象监听 组件 注册全局组件 注册局部组件 Vue-CLI脚手架 安装和使用 .browserslistrc main.js jsconfig.jso ...

  7. vue组件间通信传递数据的四种方式(路由传参、父子组件传参、兄弟组件传参、深层次传参)

    前言: vue组件间通信对于经常来写vue的伙伴来说应该是很轻松的,对于一些刚入门的伙伴来说可能就有些迷茫,感觉方式有很多种,但是总结起来又不知道应该怎么说,在下面的文章中,我结合自己的开发过程中经常 ...

  8. 深入理解vue中的slot与slot-scope

    写在前面 vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项在使用频率.使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生&qu ...

  9. GitChat · 前端 | Vue 组件库实践和设计

    来自 GitChat 作者:周志祥 更多IT技术分享,尽在微信公众号:GitChat技术杂谈 前言 现在前端的快速发展,已经让组件这个模式变的格外重要.对于市面上的组件库,虽然能满足大部分的项目,但是 ...

最新文章

  1. mac访问linux桌面文件夹路径,mac下“远程桌面”访问linux
  2. 【Java】 Base64原理及简单应用
  3. c#怎么做windows窗体小程序_个人想做微信小程序怎么做?
  4. input禁止鼠标滚轮改变数值
  5. 使用“时间机器”备份您的 Mac
  6. [转载] python---python中时间的应用(time模块)
  7. java如何生成jar包
  8. 笔记本打印时出现打印机出现异常配置问题_win10系统打印机出现administrator无法打印如何解决...
  9. STM32学习总结(二)
  10. 从七桥问题开始:全面介绍图论及其应用
  11. C#语言实例源码系列-设置系统时间
  12. Gitlab修改服务端及客户端密码方式方法
  13. SAP 公司间标准委外流程
  14. 微信图片分享支持url,缩略图支持url
  15. LeetCode代码刷题(17~24)
  16. loadrunner使用sitescope监测监控mysql数据库
  17. 《Domain Separation Networks》文献翻译
  18. MSRA实习申请经验分享
  19. MYSQL 存储过程的简单使用
  20. QMT vs Ptrade 速度对比 (一) 历史行情获取速度

热门文章

  1. Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多
  2. 2022-2028年中国电子陶瓷行业深度调研及投资前景预测报告
  3. 2022-2028年中国电商物流行业投资分析及前景预测报告
  4. 2022-2028年中国塑料绳的制造行业市场现状调查及投资商机预测报告
  5. Go 知识点(06)— for range 切片并对切片进行 append 不会造成死循环
  6. 由动态规划计算编辑距离引发的思考
  7. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
  8. pytorch BiLSTM+CRF代码详解 重点
  9. MinkowskiEngine语义分割
  10. 利用NVIDIA-NGC中的MATLAB容器加速语义分割