详解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 相关文章推荐
图片完美缩放
Sep 07 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
Apr 02 Javascript
jQuery之网页换肤实现代码
Apr 30 Javascript
Javascript基础教程之argument 详解
Jan 18 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 Javascript
JavaScript基础教程——入门必看篇
May 20 Javascript
node.js express安装及示例网站搭建方法(分享)
Aug 22 Javascript
javascript设计模式之单体模式学习笔记
Feb 15 Javascript
node.JS md5加密中文与php结果不一致的解决方法
May 05 Javascript
webpack热模块替换(HMR)/热更新的方法
Apr 05 Javascript
javascript sort()对数组中的元素进行排序详解
Oct 13 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
Aug 14 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在服务器执行exec命令失败的解决方法
2012/03/03 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
树莓派实现移动拍照
2019/06/22 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
学习十八大标语
2014/10/09 职场文书
库房管理员岗位职责
2015/02/12 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书