博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue warning如何去掉_详解vue组件三大核心概念
阅读量:7028 次
发布时间:2019-06-28

本文共 1948 字,大约阅读时间需要 6 分钟。

前言

本文主要介绍属性、事件和插槽这三个vue基础概念、使用方法及其容易被忽略的一些重要细节。如果你阅读别人写的组件,可以从这三个部分展开,它们可以帮助你快速了解一个组件的所有功能。

9b89b56416c469aea5adba5df7283e01.png

本文的代码请猛戳https://github.com/ljianshu/Blog,纸上得来终觉浅,大家动手多敲敲代码!

一、属性

1.自定义属性props

prop 定义了这个组件有哪些可配置的属性,组件的核心功能也都是它来确定的。写通用组件时,props 最好用对象的写法,这样可以针对每个属性设置类型、默认值或自定义校验属性的值,这点在组件开发中很重要,然而很多人却忽视,直接使用 props 的数组用法,这样的组件往往是不严谨的。

// 父组件 // 子组件 props: { name: String, type: {  //从父级传入的 type,它的值必须是指定的 'success', 'warning', 'danger'中的一个,如果传入这三个以外的值,都会抛出一条警告 validator: (value) => { return ['success', 'warning', 'danger'].includes(value) } }, onChange: { //对于接收的数据,可以是各种数据类型,同样也可以传递一个函数 type: Function, default: () => { } }, isVisible: { type: Boolean, default: false }, list: { type: Array, // 对象或数组默认值必须从一个工厂函数获取 default: () => [] } }

从上面的例中,可以得出props 可以显示定义一个或一个以上的数据,对于接收的数据,可以是各种数据类型,同样也可以传递一个函数。

2.inheritAttrs

这是2.4.0 新增的一个API,默认情况下父作用域的不被认作 props 的特性绑定将会“回退”且作为普通的 HTML 特性应用在子组件的根元素上。可通过设置 inheritAttrs 为 false,这些默认行为将会被去掉。注意:这个选项不影响 class 和 style 绑定

上个例中,title属性没有在子组件中props中声明,就会默认挂在子组件的根元素上,如下图所示:

0db3348a6b6622c228e10e34f4411061.png

3. data与props区别

  • 相同点

两者选项里都可以存放各种类型的数据,当行为操作改变时,所有行为操作所用到和模板所渲染的数据同时都会发生同步变化。

  • 不同点

data 被称之为动态数据,在各自实例中,在任何情况下,我们都可以随意改变它的数据类型和数据结构,不会被任何环境所影响。

props 被称之为静态数据,在各自实例中,一旦在初始化被定义好类型时,基于 Vue 是单向数据流,在数据传递时始终不能改变它的数据类型,而且不允许在子组件中直接操作 传递过来的props数据,而是需要通过别的手段,改变传递源中的数据。至于如何改变,我们接下去详细介绍:

4.单向数据流

这个概念出现在组件通信。props的数据都是通过父组件或者更高层级的组件数据或者字面量的方式进行传递的,不允许直接操作改变各自实例中的props数据,而是需要通过别的手段,改变传递源中的数据。那如果有时候我们想修改传递过来的prop,有哪些办法呢?

  • 方法1:过渡到 data 选项中

在子组件的 data 中拷贝一份 prop,data 是可以修改的

export default { props: { type: String }, data () { return { currentType: this.type } }}

在 data 选项里通过 currentType接收 props中type数据,相当于对 currentType= type进行一个赋值操作,不仅拿到了 currentType的数据,而且也可以改变 currentType数据。

  • 方法2:利用计算属性
export default { props: { type: String }, computed: { normalizedType: function () { return this.type.toUpperCase(); } }}

以上两种方法虽可以在子组件间接修改props的值,但如果子组件想修改数据并且同步更新到父组件,却无济于事。在一些情况下,我们可能会需要对一个 prop 进行『双向绑定』,此时就推荐以下这两种方法:

  • 方法3:使用.sync
// 父组件

父组件msg:{

{ msg }}

父组件数组:{

{ arr }}

打开model框

转载地址:http://iqexl.baihongyu.com/

你可能感兴趣的文章
MVC应用程序,动态创建单选列表(RadioButtonList)
查看>>
miniupnpc
查看>>
Linux 引导过程内幕
查看>>
无法打开登录所请求的数据库 "ASPState"。登录失败。 用户 'NT AUTHORITY/SYSTEM' 登录失败。...
查看>>
Windows Phone开发(47):轻松调用Web Service
查看>>
ExecuteScalar的学习日志
查看>>
解决 dotNetZip 解压乱码的问题,支持ZIP分卷解压缩
查看>>
每日英语:Who Needs to Know How to Code
查看>>
oracle11g重新安装oem
查看>>
initrd映像文档的作用和制作
查看>>
Windows Phone-框架结构和启动过程
查看>>
PHP抓取网络数据的6种常见方法
查看>>
android之RatingBar控件用法
查看>>
Cocos2dx Label
查看>>
SkipFish
查看>>
我的菜单在母版页,如何更改菜单点击后的效果
查看>>
积累的VC编程小技巧之树操作
查看>>
Oracle碎碎念~1
查看>>
服务器虚拟化ESXi 5.5安装过程
查看>>
推荐部署网站
查看>>