详解VueJs中的V-bind指令


Posted in Javascript onMay 03, 2018

引子

v-bind  主要用于属性绑定,Vue官方提供了一个简写方式 :bind,例如:

<!-- 完整语法 -->
<a v-bind:href="url"></a>
<!-- 缩写 -->
<a :href="url"></a>

  一、概述

      v-bind  主要用于属性绑定,比方你的class属性,style属性,value属性,href属性等等,只要是属性,就可以用v-bind指令进行绑定。

      示例:

<!-- 绑定一个属性 -->
<img v-bind:src="imageSrc">
<!-- 缩写 -->
<img :src="imageSrc">
<!-- 内联字符串拼接 -->
<img :src="'/path/to/images/' + fileName">
<!-- class 绑定 -->
<div :class="{ red: isRed }"></div>
<div :class="[classA, classB]"></div>
<div :class="[classA, { classB: isB, classC: isC }]">
<!-- style 绑定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div>
<!-- 绑定一个有属性的对象 -->
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>
<!-- 通过 prop 修饰符绑定 DOM 属性 -->
<div v-bind:text-content.prop="text"></div>
<!-- prop 绑定。“prop”必须在 my-component 中声明。-->
<my-component :prop="someThing"></my-component>
<!-- 通过 $props 将父组件的 props 一起传给子组件 -->
<child-component v-bind="$props"></child-component>
<!-- XLink -->
<svg><a :xlink:special="foo"></a></svg>

二、绑定 HTML Class

对象语法

       我们可以传给 v-bind:class 一个对象,以动态地切换 class

<div v-bind:class="{ active: isActive }"></div>

      上面的语法表示 active 这个 class 存在与否将取决于数据属性 isActive 的 truthiness

你可以在对象中传入更多属性来动态切换多个 class。此外,v-bind:class 指令也可以与普通的 class 属性共存。当有如下模板:

<div class="static"
  v-bind:class="{ active: isActive, 'text-danger': hasError }">
</div>
  和如下 data

data: {
 isActive: true,
 hasError: false
}

       结果渲染为:

<div class="static active"></div>

    当 isActive 或者 hasError 变化时,class 列表将相应地更新。例如,如果 hasError 的值为 true,class 列表将变为 "static active text-danger"

      绑定的数据对象不必内联定义在模板里

<div v-bind:class="classObject"></div>
data: {
 classObject: {
 active: true,
 'text-danger': false
 }
}

       渲染的结果和上面一样。我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式:

<div v-bind:class="classObject"></div>

data: {
 isActive: true,
 error: null
},
computed: {
 classObject: function () {
 return {
  active: this.isActive && !this.error,
  'text-danger': this.error && this.error.type === 'fatal'
 }
 }
}

数组语法

    我们可以把一个数组传给 v-bind:class,以应用一个 class 列表

<div v-bind:class="[activeClass, errorClass]"></div>
data: {
 activeClass: 'active',
 errorClass: 'text-danger'
}

   渲染为:

<div class="active text-danger"></div>

     如果你也想根据条件切换列表中的 class,可以用三元表达式

<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

    这样写将始终添加 errorClass,但是只有在 isActive 是 truthy 时才添加 activeClass。

     不过,当有多个条件 class 时这样写有些繁琐。所以在数组语法中也可以使用对象语法

<div v-bind:class="[{ active: isActive }, errorClass]"></div>

三、用在组件上

        当在一个自定义组件上使用 class 属性时,这些类将被添加到该组件的根元素上面。这个元素上已经存在的类不会被覆盖。

       例如,如果你声明了这个组件: 

Vue.component('my-component', {
 template: '<p class="foo bar">Hi</p>'
})

     然后在使用它的时候添加一些 class

<my-component class="baz boo"></my-component>

     HTML 将被渲染为:

<p class="foo bar baz boo">Hi</p>

     对于带数据绑定 class 也同样适用   

<my-component v-bind:class="{ active: isActive }"></my-component>

   当 isActive 为 truthy时,HTML 将被渲染成为

<p class="foo bar active">Hi</p>

 四、绑定内联样式

 对象语法

  v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用单引号括起来) 来命名: 

<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
 activeColor: 'red',
 fontSize: 30
}

     直接绑定到一个样式对象通常更好,这会让模板更清晰

<div v-bind:style="styleObject"></div>

data: {
 styleObject: {
 color: 'red',
 fontSize: '13px'
 }
}

   同样的,对象语法常常结合返回对象的计算属性使用

    数组语法

   v-bind:style 的数组语法可以将多个样式对象应用到同一个元素上

<div v-bind:style="[baseStyles, overridingStyles]"></div>

总结

以上所述是小编给大家介绍的VueJs中的V-bind指令,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript操作URL函数修改版
Nov 07 Javascript
jQuery原型属性和原型方法详解
Jul 07 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
Node.js 条形码识别程序构建思路详解
Feb 14 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 Javascript
JS简单实现浮动窗口效果示例
Sep 07 Javascript
微信小程序 flex实现导航实例详解
Apr 26 Javascript
浅谈在react中如何实现扫码枪输入
Jul 04 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
Jan 06 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
Nov 12 Javascript
Angular8 实现table表格表头固定效果
Jan 03 Javascript
Vue3.0的优化总结
Oct 16 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
May 02 #Javascript
用ES6写全屏滚动插件的示例代码
May 02 #Javascript
详解Vue中watch的高级用法
May 02 #Javascript
Vue.js中关于侦听器(watch)的高级用法示例
May 02 #Javascript
Vue SSR 组件加载问题
May 02 #Javascript
基于jquery实现左右上下移动效果
May 02 #jQuery
关于Vue在ie10下空白页的debug小结
May 02 #Javascript
You might like
php at(@)符号的用法简介
2009/07/11 PHP
PHP小教程之实现双向链表
2014/06/12 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
对python中return和print的一些理解
2017/08/18 Python
python re模块findall()函数实例解析
2018/01/19 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
详解python中的线程与线程池
2019/05/10 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
Python FFT合成波形的实例
2019/12/04 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
python3爬虫中异步协程的用法
2020/07/10 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
国外平面设计第一市场:99designs
2016/10/25 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
促销活动总结怎么写
2014/06/25 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python