【Vue】Vue基础教程(4)
前言:
本文内容:插槽slot、自定义事件内容分发、第一个vue-cli程序
推荐免费Vue基础教程视频:【狂神说Java】Vue最新快速上手教程通俗易懂_哔哩哔哩_bilibili
插槽slot
内容分发
在Vue.js
中我们使用<slot>
元素作为承载分发内容的出口,作者称其为插槽,可以应用在组合组件的场景中。
简单测试
准备制作一个待办事项组件(todo),该组件由待办标题(todo-title)和待办内容(todo-items)组成,但这三个组件又相互独立
-
定义待办事项
1
2
3
4
5
6
7
8
9
10
11// 插槽
// 待办事项组件 todo
Vue.component("todo",{
template:
'<div>\
<slot name="todo-title"></slot>\
<ul>\
<slot name="todo-items"></slot>\
</ul>\
</div>'
}); -
定义待办标题
1
2
3
4
5// 待办标题 todo-title
Vue.component("todo-title",{
props: ['title'],
template: '<div>{{title}}</div>'
}); -
定义待办内容
1
2
3
4
5// 待办内容 todo-items
Vue.component("todo-items",{
props: ['item'],
template: '<li>{{item}}</li>'
}); -
初始化数据
1
2
3
4
5
6
7let vm = new Vue({
el: "#app",
data: {
title: '书籍列表',
todoItems: ['Java','JavaScript','Python']
}
}); -
绑定到页面
1
2
3
4
5
6
7<!--view层 模板-->
<div id="app">
<todo>
<todo-title slot="todo-title" :title="title"></todo-title>
<todo-items slot="todo-items" v-for="item in todoItems" :item="item"></todo-items>
</todo>
</div> -
运行效果
1
2
3
4书籍列表
Java
JavaScript
Python
自定义事件内容分发
通过以上代码不难发现,数据在Vue实例中,若删除操作要在组件中完成,那么组件如何才能删除Vue实例中的数据呢?此时就涉及到参数传递与事件分发,Vue为我们提供了自定义事件的功能很好帮助我们解决了这个问题;使用this.$emit('自定义事件名',参数)
,操作如下:
-
在Vue的实例中,增加了methods对象并定义了一个名为
removeItems
的方法1
2
3
4
5
6
7
8
9
10
11
12
13let vm = new Vue({
el: "#app",
data: {
title: '书籍列表',
todoItems: ['Java','JavaScript','Python']
},
methods: {
removeItems: function(index){
console.log("删除"+this.todoItems[index]);
this.todoItems.splice(index,1);// 一次删除一个
}
}
}); -
使用
this.$emit
自定以事件1
2
3
4
5
6
7
8
9
10
11Vue.component("todo-items",{
props: ['item','index'],
template: '<li>{{item}}<button @click="remove">删除</button></li>',
methods: {
remove: function(index){
// alert('remove')
// 自定义事件
this.$emit('remove',index);
}
}
}); -
通过页面绑定方法
1
2
3
4
5<todo>
<todo-title slot="todo-title" :title="title"></todo-title>
<todo-items slot="todo-items" v-for="(item,index) in todoItems"
:item="item" v-bind:index="index" v-on:remove="removeItems(index)"></todo-items>
</todo> -
小结
常用属性:
- v-if
- v-else-if
- v-else
- v-for
- v-on 绑定事件,简写
@
- v-model数据双向绑定
- v-bind给组件绑定参数,简写
:
组件化
- 组合组件slot插槽
- 组件内部绑定事件需要使用到
this.$emit('事件名',参数)
- 计算属性的特色,缓存计算数据
遵循SoC关注度分离原则,Vue是视图框架,并不包含通信,我们一般使用Axios框架做异步通信
第一个vue-cli程序
什么是vue-cli
vue-cli
是官方提供的一个脚手架,用于快速生成一个vue的项目模板
预先定义好的目录结构及基础代码,类似创建Maven项目时可选择创建一个父项目,就如同vue中的脚手架,便于更快速的开发;
主要功能:
- 统一的目录结构
- 本地调试
- 热部署
- 单元测试
- 集成打包上线
需要的环境
Node.js:Node.js 中文网 (nodejs.cn)
Git:Git - Downloads (git-scm.com)
node安装成功验证:
- cmd中输入
node -v
打印版本号 - cmd中输入
npm -v
打印版本号
npm就是软件包管理工具
[可选]安装Node.js淘宝镜像加速(cnpm)
国内会出现npm下载包非常慢的问题,可以选择使用淘宝提供的国内镜像源解决下载速度慢
1 | # -g 全局安装 |
默认安装位置:C:\Users\你的电脑用户名\AppData\Roaming\npm
安装vue-cli
1 | npm install vue-cli -g |
创建一个vue-cli应用程序
-
创建一个Vue项目
-
创建一个基于webpack模板的vue应用程序
1
2# 这里是基于webpack模板的vue应用程序
vue init webpack myvue执行选择(基本都选择No,我们自己手动来配置)
1
2
3
4
5
6
7
8
9
10
11D:\Project\project3\Vue>vue init webpack myvue
? Project name myvue
? Project description A Vue.js project
? Author Joker Daxiong
? Vue build standalone
? Install vue-router? No
? Use ESLint to lint your code? No
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recommended) no说明:
- Project name:项目名称 默认
- Project description:项目描述,默认
- Author:项目作者
- Intall vue-router:是否安装vue-router,选择n不安装(手动添加)
- Use ESLint to lint your code:是否使用ESLint做代码检查,选择n
- Set up unit tests:单元测试,选择n
- Setup e2e tests with Nightwatch:单元测试,选择n
- Should we run npm install for you after the project has been created:创建完成后直接初始化,选择n
-
初始化并运行
1
2
3cd myvue
npm install
npm run dev漫长的安装过程
安装好可能会提示需要修复,按提示修复即可,修复完成后运行
npm run dev
1
2DONE Compiled successfully in 2894ms
I Your application is running here: http://localhost:8080查看我们搭建vue项目