VUEJS学习网址:https://cn.vuejs.org/

此文章是用来记录自己的学习和实践心得。
关注点:父子组件之间的通信
看图说话:
Pass Props
子组件本身与父组件是孤立的,通过子组件中显示声明的props属性,接收父组件数据;
父组件的数据更新时,子组件的prop会跟着更新;
此数据流动是单向的(看着);
Emit Events
子组件使用$.emit(fn)向外抛出自己的内部触发的事件;
父组件是否监听?如果父组件需要监听,使用v-on绑定监听,触发对应事件;
以上为通用语,具体分析
子组件可以接收一个字符串,在子组件内部可以用{{label}}使用
<v-input label="姓名"></v-input>
子组件可以接收动态参数
<input v-model="msg" /> <v-profile :message="msg"></v-profile>
子组件接收到数据之后想处理一下不小心改了怎么办?
给prop创建一个副本(建议深拷贝),处理副本,不动prop;
父组件的数据改变后,子组件的prop会自动更新,但是这个prop的副本不会啊?
使用watch监听这个prop,改变时更新副本;
子组件的prop副本改变了想要通知父组件怎么办?
使用watch监听这个副本,改变时向外抛出自己的内部触发的事件;
。。。
其实以上???在2.3有了更好的方法,之前的就是看看。
.sync修饰符
***父组件***
<input v-model="msg" />
<v-profile :message.sync="msg"></v-profile>
***子组件***
$.emit('update:message',newValue)
我是用了一下然后喜闻乐见的修改成功了,但是打开控制台有报错!!!
vue.esm.js?65d7:434 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "message"
子组件想要触发父组件可以emit(父组件需要监听才会触发),父组件触发子组件事件呢?
通过在引用的子组件上使用ref属性实现父组件调用子组件的方法以及属性
但是!$refs 只在组件渲染完成后才填充,并且它是非响应式的。它仅仅作为一个直接访问子组件的应急方案——应当避免在模版或计算属性中使用 $refs 。
关注点:非父子组件之间的通信
使用空的vue实例作为中央事件总线
var bus = new Vue();
// 触发组件 A 中的事件
bus.$emit('id-selected', 1)
// 在组件 B 创建的钩子中监听事件
bus.$on('id-selected', function (id) {
// ...
})
考虑vuex
关注点:在组件中使用slot
首先,在父组件中给子组件标签中间放置内容是无效的。然后slot出场。
白话版本:
匿名slot: slot标签存在与子组件template中; 子组件在父组件中使用的时候,子组件标签中的结构会在编译后替换子组件的slot标签; 如果子组件中没有slot,则父组件中子组件标签中的内容会消失; 具名slot: 顾名思义,是具有name属性的slot标签;并有匿名组件的特性(以上); 子组件在父组件中使用的时候,子组件中的结构中会有某些标签拥有slot属性并赋值,这些会在编译后替换子组件的相应slot标签;
一句话解释:主要的内容是写在父组件中的子组件标签中,编译后插入子组件的相应位置
讲真,说到这里我自己都不明白要slot干嘛。
官方讲解入口
官方给了个布局的例子:
<div class="container"> <header> <slot name="header"></slot> </header> <main> <slot></slot> </main> <footer> <slot name="footer"></slot> </footer> </div>
<app-layout> <h1 slot="header">这里可能是一个页面标题</h1> <p>主要内容的一个段落。</p> <p>另一个主要段落。</p> <p slot="footer">这里有一些联系信息</p> </app-layout>
但是好像也没什么好推荐的。(个人看法)
再想想:
子组件的template中至少有一个slot标签,slot标签中的内容是default content。什么场景能用到呢?我想到了刚刚写的表格数据筛选,当时用的是v-if,v-else。如果改成slot呢。。。
作用域插槽
语法:
<template scope="props"> ... </template>
——————这个官网例子我是好半天才明白
<my-awesome-list :items="items">
<!-- 作用域插槽也可以是具名的 -->
<template slot="item" scope="props">
<li class="my-fancy-item">{{ props.text }}</li>
</template>
</my-awesome-list>
以上的template中的props其实和子组件的props属性是相同的,子组件传递了什么prop,它就接收什么,像是下边的传了个text
<ul> <slot name="item" v-for="item in items" :text="item.text"> <!-- 这里写入备用内容 --> </slot> </ul>
我看了很长很长时间,为什么要这么拐个弯呢。。。
————一夜过后—————
这样内容更灵活:数据是相同的(父组件提供数据),子组件负责了循环(添加逻辑),父组件引用子组件时插入的作用域插槽的模板决定了(展示的形式)!这分工!!!点个赞!!!
我修改了一下自己的table然后页面展示了个空白。之后发现问题出在子组件往外传数据的时候变量名不能用"name"。修改掉。
关注点:动态组件使用
通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,我们让多个组件可以使用同一个挂载点,并动态切换:很适用于制作Tab类的效果
<component v-bind:is="currentView" :data1="data1" :data2="data2"> <!-- 组件在 vm.currentview 变化时改变! --> </component>
在methods属性中定义一个函数修改currentView即可。
视情况可以配合 keep-alive 避免重新渲染
在子组件上放置activate钩子做切换时的工作:done() //放到钩子最后,表示执行工作完毕,可以切换组件,配合keep-alive使用,activate钩子只执行一次
子组件接收数据和以往相同,只是这一次都写在了component中,只是如此的话,每个子组件都需要有这些接口(prop)
暂时说到这里,突然得回头看一下react,没时间了,回头会继续。
以上这篇vue2.X组件学习心得(新手必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# vue2
# 组件
# vue2.0 自定义组件的方法(vue组件的封装)
# 详解Vue2.0组件的继承与扩展
# 详解vue2.6插槽更新v-slot用法总结
# vue2中插槽(slot)的基本使用规范
# vue2组件进阶与插槽详解(推荐!)
# 自己的
# 插槽
# 我是
# 会在
# 说到
# 给大家
# 向外
# 写在
# 绑定
# 抛出
# 的是
# 是一个
# 看着
# 我想
# 会有
# 多个
# 也没
# 喜闻乐见
# 才会
# 可以用
相关文章:
建站之星如何助力企业快速打造五合一网站?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
深圳网站制作培训,深圳哪些招聘网站比较好?
如何用狗爹虚拟主机快速搭建网站?
如何制作网站标识牌,动态网站如何制作(教程)?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
红河网站制作公司,红河事业单位身份证如何上传?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
高性能网站服务器部署指南:稳定运行与安全配置优化方案
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何通过云梦建站系统实现SEO快速优化?
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何通过虚拟主机空间快速建站?
如何在腾讯云服务器上快速搭建个人网站?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
建站三合一如何选?哪家性价比更高?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
青岛网站建设如何选择本地服务器?
常州企业建站如何选择最佳模板?
如何高效搭建专业期货交易平台网站?
MySQL查询结果复制到新表的方法(更新、插入)
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
如何通过宝塔面板实现本地网站访问?
如何挑选高效建站主机与优质域名?
如何快速登录WAP自助建站平台?
C#如何序列化对象为XML XmlSerializer用法
建站主机是否属于云主机类型?
建站主机SSH密钥生成步骤及常见问题解答?
建站主机选哪家性价比最高?
php json中文编码为null的解决办法
平台云上自助建站如何快速打造专业网站?
黑客如何通过漏洞一步步攻陷网站服务器?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
寿县云建站:智能SEO优化与多行业模板快速上线指南
如何用景安虚拟主机手机版绑定域名建站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
建站主机无法访问?如何排查域名与服务器问题
学校免费自助建站系统:智能生成+拖拽设计+多端适配
网站代码制作软件有哪些,如何生成自己网站的代码?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
如何在宝塔面板中修改默认建站目录?
C++时间戳转换成日期时间的步骤和示例代码
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何通过商城免费建站系统源码自定义网站主题?
如何在万网自助建站中设置域名及备案?
建站上传速度慢?如何优化加速网站加载效率?
Android自定义listview布局实现上拉加载下拉刷新功能
*请认真填写需求信息,我们会在24小时内与您取得联系。