84.【Vue--初刷】(三)

简介: 84.【Vue--初刷】
+关注继续查看

(十)、插槽 slot

1.内容分发

Vue.js中我们使用slot元素作为承载分发内容的出口,作者称为插槽,可以用在组合组件的场景中。

留一个接口供我们进行数据的导入

image

2.测试插槽

比如准备制作一个待办事项组件(books) , 该组件由待办标题(book-title) 和待办内容(book-name)组成,但这三个组件又是相互独立的,该如何操作呢?

在Model层设置插槽的时候,给插槽起名字(就是绑定其他组件(名字所属者))。在view层的时候进行绑定插槽(绑定的是起名字的组件)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
    <books>
    // 绑定插槽,并且绑定属性和值
        <book-title slot="book-title" v-bind:titles="titles1"></book-title>
        <book-name slot="book_name" v-for="array in arrays" v-bind:book_name="array"></book-name>
    </books>
</div>
<script>
//    slot 插槽设置
    Vue.component('books',{
        template:
            '<div>'+
            // 给插槽设置名字,目的是绑定下面的组件,以及被view层绑定
                '<slot name="book-title"></slot>'+
                   '<ul>' +
                        '<slot name="book_name"></slot>'+
                    '</ul>'+
            '</div>'
    });
    
    Vue.component('book-title',{
        props:['titles'],
        template: '<div>{{titles}}</div>'
    });
    Vue.component('book-name',{
        props:['book_name'],
        template:'<li>{{book_name}}</li>'
    });
    let vue = new Vue({
        el:'#app',
        data:{
            arrays:['c++','java','c'],
            titles1:'书籍列表'
        }
    });
</script>
</body>
</html>

image

(十一)、自定义内容分发

1.简介自定义内容分发

通以上代码不难发现,数据项在Vue的实例中, 但删除操作要在组件中完成, 那么组件如何才能删除Vue实例中的数据呢?此时就涉及到参数传递与事件分发了, Vue为我们提供了自定义事件的功能很好的帮助我们解决了这个问题; 使用this.$emit(‘自定义事件名’, 参数)

2.示意图

image

3.自定义内容事件测试

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
    <books>
<!--        绑定的属性十我们自定义的props, 然而绑定的值是data里面的数据. 第一个遍历值和坐标,第二个: 绑定组件值。第三个: 绑定组件下标。第四个:绑定组件中的remove方法-->
        <book-name slot="book_name" v-for="(array,index1) in arrays" v-bind:book_name="array" v-bind:index="index1" v-on:remove="removeItem(index1)"></book-name>
    </books>
</div>
<script>
//    slot 插槽
    Vue.component('books',{
        template:
            '<div>'+
                '<slot name="book-title"></slot>'+
                   '<ul>' +
                        '<slot name="book_name"></slot>'+
                    '</ul>'+
            '</div>'
    });
    Vue.component('book-title',{
        props:['titles'],
        template: '<div>{{titles}}</div>'
    });
    Vue.component('book-name',{
        props:['book_name','index'],
        template:'<li>{{index}}---{{book_name}}<button @click="remove">清除</button></li>',
        methods:{
            remove:function (index){
                //  自定义事件名 ,传递的参数
                this.$emit('remove',index)
            }
        }
    });
    let vue = new Vue({
        el:'#app',
        data:{
            arrays:['c++','java','c'],
            titles1:'书籍列表'
        },
        methods:{
            removeItem:function (index){
                console.log('删除了'+this.arrays[index]);
                this.arrays.splice(index,1);  //一次删除一个元素,这个方法是Js的方法
            }
        }
    });
</script>
</body>
</html>

image

(十二)、第一个Vue-cil项目

1.Vue-cil简介

Vue-cil 官方提供的一个脚手架 用于快速生成一个vue的项目模板

预先定义好的目录结构及基础diamagnetic,就好比咱们再创建Maven项目的时候可以选择创建一个骨架项目,这个骨架项目就是脚手架,我们的开发更加加速。

主要功能:

  • 统一的目录结构
  • 本地调试
  • 热部署
  • 单元测试
  • 继承打包上线

2.需要的环境

  • 下载:https://nodejs.org/en/download/
  • cmd 下输入 node-v 查看是否打印出对应的版本号
  • cmd 下输入 npm-v,查看是否能够正确打印出版本号
  • 这个npm,就是一个软件包管理工具,就个Linux下的apt软件安装差不多

3.安装Node.js淘宝镜像加速器

# -g 就是全局安装
npm install cnpm -g
# 或使用如下语句解决npm速度慢的问题
npm install --registry=https://registry.npm.taobao.org

4.安装Vue-cil

npm install -g @vue/cli
#测试是否安装成功#查看可以基于哪些模板创建vue应用程序,通常我们选择webpack
vue list

5.安装路径

C:\Users\22612\AppData\Roaming\npm

6.具体步骤

(1).创建一个Vue项目

创建一个Vue项目,我们随便建立一个空的文件夹在电脑上,我这里在D盘下新建一个目录

D:\Project\vue-study;
(2).创建一个基于webpack模板的vue应用程序
#1、首先需要进入到对应的目录 cd D:\Project\vue-study
#2、这里的myvue是顶日名称,可以根据自己的需求起名
vue init webpack myvue

一路都选择no即可;

说明:

Project name:项目名称,默认回车即可
Project description:项目描述,默认回车即可
Author:项目作者,默认回车即可
Install vue-router:是否安装vue-router,选择n不安装(后期需要再手动添加)
Use ESLint to lint your code:是否使用ESLint做代码检查,选择n不安装(后期需要再手动添加)
Set up unit tests:单元测试相关,选择n不安装(后期需要再手动添加)
Setupe2etests with Nightwatch:单元测试相关,选择n不安装(后期需要再手动添加)
Should we run npm install for you after the,project has been created:创建完成后直接初始化,选择n,我们手动执行;运行结果!

image

(3).初始化并运行
cd myvue  进入文件夹
npm install  初始化
npm run dev  启动
(4).模板项目结构(各文件夹)
  • 1.node_modules //npm install
    1. public
      (1)favicon.ico: 页签图标
      (2)index.html: 主页面
  • 3.src
    (1)assets: 存放静态资源
    (2)component: 存放组件
  • 4.App.vue: 汇总所有组件
  • 5.main.js: 入口文件
  • 6.gitignore: git 版本管制忽略的配置
    1. babel.config.js: babel 的配置文件
  • 8.package.json: 应用包配置文件
    1. README.md: 应用描述文件
    2. package-lock.json:包版本控制文件
相关文章
|
10小时前
|
JavaScript
vue 3 element组件el-image的坑
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃ 发现了这个坑,立马来发个文章水一水
11 0
|
10小时前
|
JavaScript 前端开发
【Vue】—Vue组件基本介绍
【Vue】—Vue组件基本介绍
|
10小时前
|
JavaScript
Vue + Element UI 实现复制当前行数据功能(复制到新增页面组件值不能更新等问题解决)
# 1、需求 使用Vue + Element UI 实现在列表的操作栏新增一个复制按钮,复制当前行的数据可以打开新增弹窗后亦可以跳转到新增页面,本文实现为跳转到新增页面。 # 2、实现 ## 1)列表页 index.vue ```html <el-table> <!-- 其他列 --> <el-table-column label="操作" width="150"> <template slot-scope="scope"> <el-button icon="el-icon-copy-document" title="复制" @click="toCopyNew(scope
40 0
|
10小时前
|
JavaScript API
Vue组件命名规范
Vue组件命名规范
|
10天前
|
JavaScript
基于vue的cron表达式组件——vue-crontab插件
基于vue的cron表达式组件——vue-crontab插件
18 0
|
3月前
|
网络架构
84.【Vue--初刷】(六)
84.【Vue--初刷】
33 3
|
3月前
|
JavaScript 容器
84.【Vue--初刷】(五)
84.【Vue--初刷】
23 1
|
3月前
|
移动开发 JSON JavaScript
84.【Vue--初刷】(四)
84.【Vue--初刷】
22 0
|
3月前
|
缓存 JSON JavaScript
84.【Vue--初刷】(二)
84.【Vue--初刷】
40 0
|
3月前
|
移动开发 JavaScript 前端开发
相关产品
云迁移中心
推荐文章
更多