背景

使用 Element+ Layout 布局:

 <el-row>
<el-col :span="12"><div class="grid-content bg-purple"></div></el-col>
<el-col :span="12"><div class="grid-content bg-purple-light"></div></el-col>
</el-row>

Element+ Layout 将每一行的宽度平均分成 24 格,使用 span 描述每一列占用的格数,相当于每一列的宽度。

这段代码表示 1 行被拆分为 2 列,每一列占用 12 格,使用 span 属性指定,有一个奇怪的现象:

span 的属性值就是一个整数,不是变量名称,用不到属性绑定,前面为什么会有一个冒号?

去掉这个冒号行不行? 实际测试,不行!

为什么会注意到这个冒号现象?这里需要提一下 Vue3.js 的重要特性:属性绑定

Element+ 是基于 Vue3.js 实现的组件库。

<div id="1"></div>

这是一个简单的 div,且指定它的属性 id 值为 1;假设我们需要 动态 地指定它的 id,应该怎么做呢?

Vue3.js 提供的解决方案:可以定义一个变量 dynamicId,用于实际存储 id 值;然后将这个 div 的属性 id 绑定 到变量 dynamicId 上面,这个特性称之为 属性绑定

<div v-bind:id="dynamicId"></div>

属性 id 使用 属性绑定 时需要使用 v-bind: 进行标识,id 的值为需要绑定的变量名称 dynamicId;这样属性 id 的值就是变量 dynamicId 的值,如果变量 dynamicId 的值发生变化,属性 id 的值也会随之变化。

敲黑板!!! v-bind: 实际使用时可以简化为 : ,即单独的一个冒号,这就是属性名称前面冒号的由来。

问题

既然使用属性值是一个变量名称时才需要使用 v-bind: 或者 : 进行标识,为什么属性值为整数时,

<el-col :span="12">...</el-col>

v-bind: 或者 : 也必须被设置?

分析

既然问题和 属性绑定 有关,带着问题把 Vue3.js 官网相关文档又看了一遍:

重点:

对于所有的数据绑定,Vue.js 都提供了完全的 JavaScript 表达式支持。

表达式示例:

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div v-bind:id="'list-' + id"></div>

疑问:

number + 1 是一个表达式,属于属性绑定;

number 是一个变量,属于属性绑定;

1 是什么?它只是一个整数字面量,也属于属性绑定?

带着疑问百度搜索相关问题,直到看到某个同学的文章:

加冒号的,说明后面的是一个变量或者表达式;没加冒号的后面就是对应的字符串字面量!

为什么vue组件的属性,有的需要加冒号“:”,有的不用?

解释说明:

  • 加冒号的

    属性名称前面使用 v-bind: 或者 : ,表示属性值部分为变量名或表达式;
  • 没加冒号的

    属性值部分为 字符串字面量

问题关键:字符串字面量!!! 也就是说,"1" 表示的是字符串的 1,而不是整数的 1;即字符串 1 并不会被内部转换为整数 1 使用。

这也就解释了为什么去掉冒号,Element+ Layout 布局会失败?

属性 span 要求的值类型是一个整数,如果去掉属性 span 前面的冒号,像这样:

<el-col span="12">...</el-col>

这里的 12 表面看起来是一个整数,实际 Vue3.js/Element+ 是按照字符串处理的,属性值类型异常,设置无效,因此布局失败。

属性 span 前面添加冒号,像这样:

<el-col :span="12">...</el-col>

这里的 12 很明显不是一个变量名,但会按照表达式处理;这个表达式的值为整数值 12,属性值类型正常,设置有效,因此布局成功。

敲黑板!!! 单个整数也是一个表达式。

结论

在 Vue3.js/Element+ 的世界里:

  • 属性名称前面没加冒号的

    属性值部分按普通字符串处理
  • 属性名称前面加冒号的

    属性值部分按属性绑定处理,属性值可能是以下三种类型:

    1. 变量名称
    2. 单个表达式
    3. 单个整数、布尔、字符串或其它数据类型的字面值

属性绑定时,如果属性值是一个字符串,Vue3.js 会优先判断是否存在名称为该字符串的变量名:

  • 如果存在,按变更名称处理
  • 如果不存在,按字符串字面值处理

@萌猫他爸,互联网从业者/大数据架构师/全栈开发者

  • Blog
  • Github @leaderman
  • 微博 @萌猫他爸(知乎/小红书/...)
  • 公众号 @渊深海阔
  • 微信号 @meetuagent

为什么 Vue3.js / Element+ 组件属性前面有的需要添加冒号,有的不需要?的更多相关文章

  1. 【前端vue进阶实战】:从零打造一个流程图、拓扑图项目【Nuxt.js + Element + Vuex】 (一)

    本系列教程是用Vue.js + Nuxt.js + Element + Vuex + 开源js绘图库,打造一个属于自己的在线绘图软件,最终效果:topology.le5le.com .如果你觉得好,欢 ...

  2. React组件属性部类(propTypes)校验

    React组件属性类型(propTypes)校验 Prop 验证 随着应用不断变大,保证组件被正确使用变得非常有用.为此我们引入propTypes.React.PropTypes 提供很多验证器 (v ...

  3. 谈谈Ext JS的组件——组件基类:Ext.Component

    概述 Ext.Component是所有Ext组件的基类,这在Ext.Component的API中第一句话就提到了.然后第二段说明了它包含的基本功能:隐藏/显示.启用/禁用以及尺寸控制等.除了以上这些基 ...

  4. React 学习(一) ---- React Element /组件/JSX

    学习React的时候,你可能听到最多的就是要先学习webpack, babel,要先学会配置然后才能学react 等等,一堆的配置就把我们吓着了,根本就没有心情就学习react了.其实在最开始学习re ...

  5. 【Vue课堂】Vue.js 父子组件之间通信的十种方式

    这篇文章介绍了Vue.js 父子组件之间通信的十种方式,不管是初学者还是已经在用 Vue 的开发者都会有所收获.无可否认,现在无论大厂还是小厂都已经用上了 Vue.js 框架,简单易上手不说,教程详尽 ...

  6. js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable

    js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable 一.总结 一句话总结:bootstrap能够做为最火的框架,绝对不仅仅只有我看到的位置,它应该还有很多位置可 ...

  7. 初学vue 在做项目时遇到的问题与解决办法(使用element组件)(二)

    表格每行里都有按钮 <el-table-column prop="option" label="操作" align="center" ...

  8. Vue3.x 关于组件的那些变化(新手必看篇)

    一.组件内的 data 为什么总是函数形式? 我们试着先做一个计数器案例,把 data 的返回形式修改成一个对象.具体的代码如下: <template> <div> <b ...

  9. Hibernate的映射组件属性

    组件属性 如果持久化类的属性并不是基本数据类型,也不是一个日期或者字符串常量,而是一个复合类型的对象,例如 private Name name; 那么这就是一个组件属性. 组件属性可以是任何普通的ja ...

随机推荐

  1. 计算机网络再次整理————socket[一]

    前言 以前也整理过吧,写了几篇之后,感觉没啥整理的必要了然后就放弃了,最近又想整理一下. 正文 这篇对应的是:https://www.cnblogs.com/aoximin/p/12235333.ht ...

  2. ApacheCN Vue 译文集 20211115 更新

    使用 GraphQL 构建 VueJS 应用 零.前言 一.数据绑定.事件和计算属性 二.组件.混合器和功能组件 三.设置我们的聊天应用--AWS Amplify 环境和 GraphQL 四.创建自定 ...

  3. Java程序性能监控工具

    系统性能监控: 确定系统运行的整体状态,基本定位问题所在 uptime命令 [root@localhost ~]# uptime23:19:38 up 244 days, 3:39, 34 users ...

  4. 直播媒体流red5

    第一步下载 安装setup-Red5-1.0.1-java6.exe 安装教程网上有很多 显示如下页面说明安装成功 第二步 下载oflaDemo的 解压放在 第三步  打开 然后 ok了 注意:下面的 ...

  5. ios xib约束适配要点

    基本上以下几点就能解决除横屏以外的适配问题 1.页边距约束 (Leading and Trailing space) 页边间距约束分前部间距约束(Leading space constaint)和尾部 ...

  6. Nginx中的 location 匹配和 rewrite 重写跳转

    Nginx中的location匹配和rewrite重写跳转 1.常用的Nginx正则表达式 2.location 3.rewrite 4.rewrite实例 1.常用的Nginx正则表达式: ^ :匹 ...

  7. LAMP以及各组件的编译安装

    LAMP以及各组件的编译安装 目录 LAMP以及各组件的编译安装 一.LAMP 1. LAMP概述 2. 各组件的主要作用 3. 平台环境的安装顺序 二.编译安装apache httpd 1. 关闭防 ...

  8. HTTPStatus(状态码返回)详情

    1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101 (切 ...

  9. 总结下Mac环境下按照appium

    第10天休息 先来总结下Mac环境下按照appium 一.相关网站 官网: http://appium.io/ 测试论坛 https://testerhome.com/wiki 二.环境准备   从官 ...

  10. 《PHP程序员面试笔试宝典》——如何克服面试中紧张的情绪?

    本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 面试的成功与否,往小的方面讲,直接关系到求职者的工作问题,往大 ...