详解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 相关文章推荐
jquery异步循环获取功能实现代码
Sep 19 Javascript
Javascript面向对象编程(二) 构造函数的继承
Aug 28 Javascript
解决jquery异步按一定的时间间隔刷新问题
Dec 10 Javascript
javascript列表框操作函数集合汇总
Nov 28 Javascript
ajax读取数据后使用jqchart显示图表的方法
Jun 10 Javascript
Node.js实现数据推送
Apr 14 Javascript
利用JavaScript判断浏览器类型及版本
Aug 23 Javascript
vue.js移动端tab组件的封装实践实例
Jun 30 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
Dec 27 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 Javascript
layui数据表格 table.render 报错的解决方法
Sep 29 Javascript
JS造成内存泄漏的几种情况实例分析
Mar 02 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 COOKIE设置为浏览器进程
2009/06/21 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
js 三级关联菜单效果实例
2013/08/13 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
python pickle 和 shelve模块的用法
2013/09/16 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
深入了解Django中间件及其方法
2019/07/26 Python
python 实现dict转json并保存文件
2019/12/05 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
Python实现搜索算法的实例代码
2020/01/02 Python
Python itertools.product方法代码实例
2020/03/27 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
电子商务个人职业生涯规划范文
2014/02/12 职场文书
工作证明英文模板
2014/10/21 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
职代会闭幕词
2015/01/28 职场文书
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL