vue自定义组件,插槽,自定义事件

vue组件套娃

    • 1. vue自定义组件
    • 2. 组件和插槽套娃
    • 3. vue组件通过自定义事件更改vue实例中的数据

1. vue自定义组件

  • 语法
Vue.component('自定义组件名', {props: ['var1', 'var2', 'var3'], //每个属性可以和页面绑定值template: '<p>{{ var1 }}</p>' // 自定义模板 里面套html标签, 可以取属性的值
})
  • 第一个自定义组件
<script>Vue.component('lover', {template: '<p>taylor swift - lover.mp3</p>'});let app = new Vue({el: "#app",data: {}});
</script>
<div id="app"><!-- 使用自定义组件模板,注意绑定了vue对象才有用 --><lover></lover>
</div>
  • 将自定义组件里面的数据写活
<script>
/* 自定义组件模板 bitqian标签 */
Vue.component("bitqian", {props: ['language'],template: '<li>{{ language }}</li>'
});let app = new Vue({el: "#app",data: {items: ["java", "python", "go"]}
});</script>
 <!-- 获得每个item,并将items里面的每个item通过组件的language属性绑定到bitqian标签 --><bitqian v-for="item in items" v-bind:language="item" v-bind:key="item.index"></bitqian>
  • 完整代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>vue 组件绑定值</title><script src="../js/vue.js"></script>
</head>
<body><div id="app"><!-- 使用自定义组件模板,注意绑定了vue对象才有用 --><lover></lover><hr/><!-- 获得每个item,并将items里面的每个item通过组件的language属性绑定到bitqian标签 --><bitqian v-for="item in items" v-bind:language="item" v-bind:key="item.index"></bitqian></div><script>Vue.component('lover', {template: '<p>taylor swift - lover.mp3</p>'});/* 自定义组件模板 bitqian标签 */Vue.component("bitqian", {props: ['language'],template: '<li>{{ language }}</li>'});let app = new Vue({el: "#app",data: {items: ["java", "python", "go"]}});</script></body>
</html>

2. 组件和插槽套娃

  • 插槽<slot></slot>,就是一个孔,可以套vue组件
  • 用组件套组件的方式代替普通的html标签
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>slot插槽 结合vue组件 实现模板化</title><script src="../js/vue.js"></script>
</head>
<body><div id="app"><!-- 将每个item的值绑定到模板中的属性上 --><my-component v-for="item in items" v-bind:language="item"></my-component></div><!-- 插槽的目的 为了实现代码模板化 --><div id="app1"><!--<p>后端语言</p><ul><li>java</li><li>python</li><li>go</li><li>linux</li></ul>--><demo-component><!-- 记得绑定插槽 --><demo-title slot="demo-title" v-bind:title="title"></demo-title><demo-item slot="demo-item" v-for="(item, index) in items":item="item" v-bind:index="index"></demo-item></demo-component></div><script>// vue组件复习Vue.component('my-component', {props: ['language'],template: '<li>{{ language }}</li>'})new Vue({el: "#app",data: {items: ['c', 'cpp', 'object-c']}})/* slot 插槽定义 组件通过插槽套组件 */Vue.component('demo-component', {template:'<div>' +'<slot name="demo-title"></slot>' +'<ul>' +'<slot name="demo-item"></slot>' +'</ul>' +'</div>'})// 标题组件Vue.component('demo-title', {props: ['title'],template: '<p>{{ title }}</p>'})// 标题下面对应的每一项Vue.component('demo-item', {props: ['item', 'index'],template: '<li>{{ index }}=========={{ item }} </li>'})// vue实例 给组件提供数据 let vm = new Vue({el: "#app1",data: {title: '后端语言',items: ['java', 'python', 'go', 'linux']}})</script>
</body>
</html>

3. vue组件通过自定义事件更改vue实例中的数据

  • this.$emit(‘functionName’, params…)实现自定义事件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>vue 插槽复习</title><script src="../js/vue.js"></script>
</head>
<body><div id="app"><my-component><!-- 给组件插槽 绑定vue实例对象中的title --><!-- v-bind:index="index" ==> :index="index" --><!-- v-on:click="show" @click="show" --><my-title slot="my-title" v-bind:title="title"></my-title><my-content slot="my-content" v-for="(item, index) in items":content="item" :index="index" :key="index"v-on:remove="removeItems(index)"> <!-- 自定义移除事件remove 并绑定了vue实例中的removeItems --></my-content></my-component></div><script>Vue.component('my-component', {/* 使用插槽代替 模板对象 */template:'<div>\<slot name="my-title"></slot>\<ul><slot name="my-content"></slot></ul>\</div>'})Vue.component('my-title', {props: ['title'],template: '<p>{{ title }}</p>'})Vue.component('my-content', {props: ['content', 'index'], // 定义index属性接收页面的绑定值template: '<li>{{ index }} ===== {{ content }} <button @click="remove">移除</button> </li>', //绑定了removemethods: {remove: function (index) {// 自定义事件分发 移除vue实例中的数据// alert('remove ..' + index)// 调用自定义函数 并传入参数this.$emit('remove', index)}}})let vm = new Vue({el: "#app",data: {title: 'a title',items: ['java', 'python', 'go']},methods: {removeItems: function (index) {// 从index这一位移除this.items.splice(index, 1);}}});</script></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue脚手架v-cli,第一个vue程序

运行在node服务器上的vue程序1. v-cli安装2. 使用webpack构建vue程序3. 目录介绍4. webpack将vue打包成js文件1. v-cli安装 在玩v-cli vue客户端脚手架时&#xff0c;需要安装好node.js&#xff0c;是前端管理js包的工具正式安装vue-cli脚手架 1. npm install vue-cli -g 2. …

ssh框架搭建

下载地址&#xff1a;源码和详细搭建步骤 使用myeclipse2014搭建ssh框架1. spring搭建2. struts2搭建3. hibernate搭建4. applicationContext编写5. web.xml编写1. spring搭建 创建一个javaweb项目 导入spring框架 最高版本3.1支持 4. 选择类库 spring导入完毕 2. str…

iOS: 图解Xcode常用的快捷键

对于习惯了Windows 操作的开发者来说&#xff0c; 初次接触Xcode时&#xff0c;你会感到有种种不适&#xff0c;其中一个重要的原因就是&#xff0c; 相比Windows X86 电脑&#xff0c; Mac 多出了两个物理键&#xff1a; Fn 和 Command。 尤其是 Command键&#xff0c;在 Ma…

vue参数传递

目标&#xff1a;纯前端vue实现页面跳转restful传值 目录1. 全局路由配置2. 如何传值3. 页面取值1. 全局路由配置 // 路由器主配置文件 import Vue from vue import VueRouter from vue-routerimport Main from ../views/main import Login from ../views/login// 导入用户模块…

adb——Android的ADB工具使用

一、定义与作用&#xff1a; ADB全称Android Debug Bridge, 就是起到调试桥的作用。是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备,默认情况下当我们运行Eclipse时adb进程就会自动运行。当然我们也可以在外部使用本身自带的一些命…

手把手教你搭建springboot程序

spring-boot项目搭建一、从官网搭建1、进入spring官网&#xff0c;快速初始化一个项目2、填写项目基本信息3、项目结构分析4、添加项目依赖5、下载到本地6、解压7、idea&#xff0c;打开&#xff0c;使用maven构建项目8、使用maven构建9、这是构建好的&#xff0c;其它目录全部…

yaml格式,给Java类绑定数据

这里写目录标题1、基本语法2、给java bean注入值3、测试1、基本语法 # yaml 配置文件写法&#xff0c;代替properties写法 # 严格区分空格# 内注入到配置类中 server:port: 8081# 对象 student:name: jackage: 3# 行内写法 map student1: {name: jack, age: 3}# array or coll…

android编程常见问题- Resource ID #0x7f070001 type #0x12 is not valid

问题说明&#xff1a; AndroidRuntime(1705): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.activitytest/com.example.activitytest.SecondActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f070001 type #…

一款纯css3实现的超炫动画背画特效

之前为大家介绍了很多款由纯css3实现的特效。今天要再给大家带来一款纯css3实现的超炫动画背画特效。代码非常简单&#xff0c;没有引用任何其它js代码。css代码也不多。效果非常炫。一起看下效果图&#xff1a; 在线预览 源码下载 实现的代码。 html代码&#xff1a; <di…

springboot指定首页(静态资源导入)

ResourceProperties小小的源码分析1. 静态资源该放在哪里&#xff1f;2. 首页该如何自动展示&#xff1f;1. 静态资源该放在哪里&#xff1f; springboot 集成了spring-webmvc,这个都是知道的。 该框架的特点是自动装配。 先看WebMvcAutoConfiguration自动装配类 public void…

【从零之三(更)】自定义类中调用讯飞语音包错误解决办法

原文&#xff1a;http://blog.csdn.net/monkeyduck/article/details/24302655 在科大讯飞语音包的Mscdemo中它的方法都是写在Activity中的&#xff0c;这样其实并不是很好&#xff0c;因为Activity只是负责UI交互的&#xff0c;如果项目很简单自然可以&#xff0c;但是一旦比较…

spring 整合quartz

定时框架quartz1. 使用场景2. corn表达式3. 简单使用4. 注意点1. 使用场景 定时任务 周期性执行 &#xff08;每隔多长时间&#xff09; 定时执行&#xff08;每天几点&#xff09; 系统之间的数据交换 两个系统之间的数据 数据整理 报表打印… 2. corn表达式 corn 表达式…

poi excel文档生成与读取

阿帕奇poi excel文档操作1. introduce2. 轮子3. demo 以九九乘法表为例3.1 xls的生成3.2 xlsx的生成3.3 读取xlsx1. introduce poi是什么 答&#xff1a;用于excel的操作的&#xff0c;可以对集合&#xff0c;map进行操作生成对应的excel文档。做报表。 对应的iText是pdf操作的…

echarts生成图表

目录1. echarts是一个优秀的js绘图框架2. 如何使用echats框架绘图&#xff1f;3. 更多彩蛋1. echarts是一个优秀的js绘图框架 ECharts&#xff0c;一个使用 JavaScript 实现的开源可视化库&#xff0c;可以流畅的运行在 PC 和移动设备上&#xff0c;兼容当前绝大部分浏览器&…

HDU 1394 线段树or 树状数组~

Minimum Inversion Number   Description The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that satisfy i < j and ai > aj. For a given sequence of numbers a1, a2, ..., an, if we move the first m > 0 nu…

servlet,springmvc,springboot转发时页面静态资源404问题

目录不讨论静态资源过滤的问题。。。这个问题重定向不会404&#xff0c;因为重定向是找到了对应的页面&#xff0c;是浏览器决定的。 而转发在相同目录下转发会找到资源。但是从controller&#xff08;根目录&#xff09;里面转发到根目录的下面的目录&#xff0c;转发能过去&…

mysql数据库面试总结

mysql数据库相关1. 数据库事务的四个特性及含义2. 视图的作用&#xff0c;视图可以更改么2.1 什么是视图&#xff0c;作用3. drop,delete与truncate的区别4. 索引的工作原理及其种类5. 连接查询的种类6. 数据库范式7. 数据库优化的思路7.1 sql语句的优化7.2 数据库结构优化7.3 …