详解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 相关文章推荐
js函数使用技巧之 setTimeout(function(){},0)
Feb 09 Javascript
js子页面获取父页面数据示例
May 15 Javascript
node.js中的fs.fchmodSync方法使用说明
Dec 16 Javascript
jQuery实现延迟跳转的方法
Jun 05 Javascript
纯js实现手风琴效果代码
Apr 17 Javascript
AngularJS constant和value区别详解
Feb 28 Javascript
JavaScript中最常见的三个面试题解析
Mar 04 Javascript
Vue中对比scoped css和css module的区别
May 17 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
Jul 26 Javascript
jQuery动态操作表单示例【基于table表格】
Dec 06 jQuery
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 Javascript
vue请求数据的三种方式
Mar 04 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 进度条实现代码
2009/03/10 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
php实现session共享的实例方法
2019/09/19 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
2010/07/11 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
Python科学计算环境推荐——Anaconda
2014/06/30 Python
Python fileinput模块使用介绍
2014/11/30 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
简单理解Python中的装饰器
2015/07/31 Python
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
python面试题小结附答案实例代码
2019/04/11 Python
Django中的cookie和session
2019/08/27 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
深入分析python 排序
2020/08/24 Python
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
如何写好自荐信
2014/04/07 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书