第四天:Vue组件的slot以及webpack
插槽
认识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相关推荐
- 四、Vue组件化开发学习笔记——父子组件通信,父级向子级传值(props),子级向父级传值(自定义事件),slot插槽
一.父子组件的通信 在上一篇博文中,我们提到了子组件是不能引用父组件或者Vue实例的数据的. 但是,在开发中,往往一些数据确实需要从上层传递到下层: 比如在一个页面中,我们从服务器请求到了很多的数据. ...
- 【Vue2-尚硅谷四】Vue ---ajax---插槽slot
文章目录 4.1,vue脚手架配置代理 方法一 方法二 4.2,GitHub搜索案例 入口main.js App.vue Search.vue List.vue 4.3,slot插槽 4.3.1,默认 ...
- 【视频】vue组件之slot插槽
P11vue组件之slot插槽 https://www.bilibili.com/video/av91679349?p=11
- 四、Vue项目去哪儿网首页推荐和周末游组件并使用Axios获取数据
文章目录 在码云创建index-recommended分支 在Home.vue中引用Recommend.vue组件和Weekend.vue组件 Recommend.vue组件 Weekend.vue组 ...
- vue组件之具名slot 的分类案例
需求说明: 利用组件的复用完成美食.游戏.电影的分类布局. 使用具名slot完成分类组件的不同内容显示. 实现过程: 1.创建一个分类子组件(Category.vue),在子组件中定义具名插槽: &l ...
- 【VUE3】保姆级基础讲解(二)计算属性,vue组件,vue-cli脚手架,组件通讯,插槽slot
目录 计算属性computed 侦听器watch 对象监听 组件 注册全局组件 注册局部组件 Vue-CLI脚手架 安装和使用 .browserslistrc main.js jsconfig.jso ...
- vue组件间通信传递数据的四种方式(路由传参、父子组件传参、兄弟组件传参、深层次传参)
前言: vue组件间通信对于经常来写vue的伙伴来说应该是很轻松的,对于一些刚入门的伙伴来说可能就有些迷茫,感觉方式有很多种,但是总结起来又不知道应该怎么说,在下面的文章中,我结合自己的开发过程中经常 ...
- 深入理解vue中的slot与slot-scope
写在前面 vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项在使用频率.使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生&qu ...
- GitChat · 前端 | Vue 组件库实践和设计
来自 GitChat 作者:周志祥 更多IT技术分享,尽在微信公众号:GitChat技术杂谈 前言 现在前端的快速发展,已经让组件这个模式变的格外重要.对于市面上的组件库,虽然能满足大部分的项目,但是 ...
最新文章
- mac访问linux桌面文件夹路径,mac下“远程桌面”访问linux
- 【Java】 Base64原理及简单应用
- c#怎么做windows窗体小程序_个人想做微信小程序怎么做?
- input禁止鼠标滚轮改变数值
- 使用“时间机器”备份您的 Mac
- [转载] python---python中时间的应用(time模块)
- java如何生成jar包
- 笔记本打印时出现打印机出现异常配置问题_win10系统打印机出现administrator无法打印如何解决...
- STM32学习总结(二)
- 从七桥问题开始:全面介绍图论及其应用
- C#语言实例源码系列-设置系统时间
- Gitlab修改服务端及客户端密码方式方法
- SAP 公司间标准委外流程
- 微信图片分享支持url,缩略图支持url
- LeetCode代码刷题(17~24)
- loadrunner使用sitescope监测监控mysql数据库
- 《Domain Separation Networks》文献翻译
- MSRA实习申请经验分享
- MYSQL 存储过程的简单使用
- QMT vs Ptrade 速度对比 (一) 历史行情获取速度
热门文章
- Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多
- 2022-2028年中国电子陶瓷行业深度调研及投资前景预测报告
- 2022-2028年中国电商物流行业投资分析及前景预测报告
- 2022-2028年中国塑料绳的制造行业市场现状调查及投资商机预测报告
- Go 知识点(06)— for range 切片并对切片进行 append 不会造成死循环
- 由动态规划计算编辑距离引发的思考
- 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
- pytorch BiLSTM+CRF代码详解 重点
- MinkowskiEngine语义分割
- 利用NVIDIA-NGC中的MATLAB容器加速语义分割