一、为属性绑定变量

在前面第一部分中,我们已经可以使用Vue来动态绑定元素中的值了,但是我们该怎样绑定为元素的属性绑定一个变量呢?

1. v-bind的基本使用

我们可以使用v-bind来为一个元素的属性绑定一个在Vue实例中定义好的变量,语法为:

  1. v-bind:属性名="表达式"

如下例所示:

  1. var app = new Vue({
  2. el: '#app',
  3. data: {
  4. imgURL: "https://dss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2296203553,2815843260&fm=58",
  5. aHref: "http://baidu.com",
  6. aName: "百度一下"
  7. }
  8. });
  1. <div id="app">
  2. <!-- 错误的做法 -->
  3. <!-- <img src="{{imgURL}}" alt=""> -->
  4. <img v-bind:src="imgURL" alt="">
  5. <a v-bind:href="aHref">{{aName}}</a>
  6. <!-- 语法糖写法,实际开发主要使用 -->
  7. <img :src="imgURL" alt="">
  8. <a :href="aHref">{{aName}}</a>
  9. </div>

运行结果:

可以发现元素上属性的值都可以由变量指定了,而 :属性名="表达式"是原始写法的语法糖。

2. v-bind动态绑定class(对象语法)

语法:

  1. v-bind:class="obj"

其中obj是一个js对象,它的变量名)是某个类的类名bool类型,决定这个类是否绑定到该元素上

示例:

  1. var app = new Vue({
  2. el: '#app',
  3. data: {
  4. message: "你好啊",
  5. active: "active",
  6. isActive: true,
  7. isLine: true,
  8. },
  9. methods: {
  10. btnClick: function () {
  11. this.isActive = !this.isActive;
  12. },
  13. getClasses: function () {
  14. return { active: this.isActive, line: this.isLine };
  15. }
  16. }
  17. });
  1. .active {
  2. color: red;
  3. }
  1. <div id="app">
  2. <h2 class="active">第一个:{{message}}</h2>
  3. <h2 :class="active">第二个:{{message}}</h2>
  4. <!-- <h2 v-bind:class="{key1:value, key2:value}"></h2> -->
  5. <!-- <h2 v-bind:class="{类名1:true, 类名2:false}"></h2> -->
  6. <h2 class="title" v-bind:class="{active:isActive, line:isLine}">TrueOrFalse</h2>
  7. <h2 class="title" v-bind:class="getClasses()">TrueOrFalse</h2>
  8. <button v-on:click="btnClick">变色</button>
  9. </div>

运行结果:

3. v-bind动态绑定class(数组语法)

语法:

  1. v-bind:class="list"

其中list是一个js数组,其中的各个元素的值(字符串)是要绑定到该html元素的class。

示例如下:

  1. var app = new Vue({
  2. el:'#app',
  3. data:{
  4. message:"你好啊",
  5. active:"aaaa",
  6. line:"bbbb",
  7. },
  8. methods:{
  9. getClasses:function(){
  10. return ["aaa","bbb"]
  11. }
  12. }
  13. });
  1. <div id="app">
  2. <!-- 有单引号当做字符串,无当做变量解析 -->
  3. <h2 :class="['active','line']">{{message}} </h2>
  4. <h2 :class="[active, line]">{{message}} </h2>
  5. <h2 :class="getClasses()">{{message}} </h2>
  6. </div>

运行结果:

4. v-bind动态绑定style(对象语法)

语法:

  1. v-bind:style="obj"

其中objVue实例中的一个js对象,它的变量名)对应着css样式属性,而对应着该样式属性的值,因此我们可以通过改变obj中的某个键的改变某个样式

示例:

  1. var app = new Vue({
  2. el: '#app',
  3. data: {
  4. message: "你好啊",
  5. finalSize: "100px",
  6. finalInt: 100,
  7. finalColor: "red"
  8. },
  9. methods: {
  10. getStyles: function () {
  11. return { fontSize: this.finalInt + 'px', color: this.finalColor }
  12. },
  13. addSize: function () {
  14. if (this.finalInt < 130) {
  15. this.finalInt += 10;
  16. }
  17. },
  18. subSize: function () {
  19. if (this.finalInt > 50) {
  20. this.finalInt -= 10;
  21. }
  22. },
  23. change: function () {
  24. if (this.finalColor == 'blue') {
  25. this.finalColor = 'red';
  26. }
  27. else {
  28. this.finalColor = 'blue';
  29. }
  30. }
  31. }
  32. });
  1. <div id="app">
  2. <!-- <h2 :style="{key(属性名):value(属性值)}">{{message}} </h2> -->
  3. <!-- <h2 :style="{fontSize:'50px'}">{{message}} </h2> -->
  4. <!-- <h2 :style="{fontSize: finalSize}">{{message}}</h2> -->
  5. <h2 :style="{fontSize: finalInt+'px', color: finalColor}">{{message}}</h2>
  6. <h2 :style="getStyles()">{{message}}</h2>
  7. <button @click="addSize">+</button>
  8. <button @click="subSize">-</button>
  9. <button @click="change">变色</button>
  10. </div>

5. v-bind动态绑定style(数组语法)

语法:

  1. v-bind:style="list"

其中list是一个js数组,其中的各个元素的值(对象)是要绑定到该html元素的style键值对。其中键名变量名)是style属性名,值是对应属性值。

示例:

  1. var app = new Vue({
  2. el:'#app',
  3. data:{
  4. message:"你好啊",
  5. baseStyle:{backgroundColor:'red'},
  6. baseStyle1:{fontSize:'100px'}
  7. },
  8. methods:{}
  9. });
  1. <div id="app">
  2. <h2 :style="[baseStyle, baseStyle1]">{{message}}</h2>
  3. </div>

运行效果:

二、计算属性

计算属性被编写到Vue实例中的computed属性中

语法:

  1. ...
  2. computed: {
  3. 计算属性名(一般以名词命名): function () {
  4. // 相当于一个属性
  5. return xxx;
  6. }
  7. },
  8. ...

在语法上和方法的写法基本相同。

1. 基本使用

  1. var app = new Vue({
  2. el: '#app',
  3. data: {
  4. firstName: "Lebron",
  5. lastName: "James"
  6. },
  7. computed: {
  8. fullName: function () {
  9. // 相当于一个属性
  10. return this.firstName + " " + this.lastName;
  11. }
  12. },
  13. methods: {
  14. getFullName: function () {
  15. return this.firstName + " " + this.lastName;
  16. }
  17. }
  18. });
  1. <div id="app">
  2. <h2>{{firstName+" "+lastName}} </h2>
  3. <h2>{{firstName}} {{lastName}} </h2>
  4. <h2>{{getFullName()}} </h2>
  5. <h2>{{fullName}} </h2>
  6. </div>

运行结果:

可以发现使用方法计算属性都可以得到正确的结果。

2. 计算属性的setter和getter

语法:

  1. computed:{
  2. 计算属性名:{
  3. set:function(){
  4. ...
  5. },
  6. get:function(){
  7. ...
  8. }
  9. }
  10. },

且计算属性一般是没有set方法的

3. 计算属性和method对比

最主要的差别是计算属性在第一次返回结果后会有缓存机制,若结果相同则不会再次计算,如下例所示:

  1. var app = new Vue({
  2. el: '#app',
  3. data: {
  4. firstName: "Kobe",
  5. lastName: "Bryant",
  6. },
  7. computed: {
  8. fullName: function () {
  9. console.log("+++++")
  10. return this.firstName + " " + this.lastName;
  11. }
  12. },
  13. methods: {
  14. getFullName: function () {
  15. console.log("=========")
  16. return this.firstName + " " + this.lastName;
  17. }
  18. }
  19. });
  1. <div id="app">
  2. <h2>{{getFullName()}} </h2>
  3. <h2>{{getFullName()}} </h2>
  4. <h2>{{getFullName()}} </h2>
  5. <h2>{{getFullName()}} </h2>
  6. <!-- 缓存机制 -->
  7. <h2>{{fullName}} </h2>
  8. <h2>{{fullName}} </h2>
  9. <h2>{{fullName}} </h2>
  10. <h2>{{fullName}} </h2>
  11. </div>

运行结果:

可以发现getFullName()方法执行了4次,而fullName计算属性只执行了1次

三、事件监听

v-on的基本使用可以参照上个部分的计数器。

1. v-on的参数问题

  1. 如果没有传入参数,则默认的参数为undifined
  1. <button @click="click1()">按钮1</button>
  1. 如果不写函数的括号,则会默认将event对象传递过去
  1. <button @click="click2">按钮2</button>
  1. 如何手动获得浏览器产生的event对象(使用$event
  1. <button @click="click3(123, $event)">按钮3</button>

示例:

  1. var app = new Vue({
  2. el: '#app',
  3. data: {},
  4. methods: {
  5. click1() {
  6. console.log("按钮1");
  7. },
  8. click2(abc) {
  9. console.log(abc);
  10. },
  11. click3(abc, event) {
  12. console.log(abc, event);
  13. }
  14. }
  15. });
  1. <div id="app">
  2. <button @click="click1()">按钮1</button>
  3. <!-- 如果没有传入参数,则默认参数为undefined -->
  4. <!-- <button @click="click2(123)">按钮2</button> -->
  5. <!-- <button @click="click2()">按钮2</button> -->
  6. <!-- 这种情况会将event对象传递过去 -->
  7. <button @click="click2">按钮2</button>
  8. <!-- 如何手动获得浏览器产生的event对象 -->
  9. <button @click="click3(123, $event)">按钮3</button>
  10. </div>

运行结果:


2. v-on修饰符

click的.stop修饰符

这个修饰符可以阻止事件气泡往下传递

对比:

  1. <div @click="divClick">
  2. inside div
  3. <button @click="btnClick">按钮</button>
  4. </div>

和:

  1. <div @click="divClick">
  2. inside div
  3. <button @click.stop="btnClick">按钮</button>
  4. </div>

第一种情况除了btnClick()方法会被调用外,button元素的父元素div也会收到点击事件,进而divClick()函数也会被调用。

而第二种情况则使用了.stop阻止气泡向下传递,只有btnClick()方法会被调用。

click的.prevent修饰符

作用:阻止事件的默认行为,然后执行后面引用的method

例如:

  1. <form action="baidu">
  2. <input type="submit" value="提交" @click.prevent="submitClick">
  3. </form>

这样当点击按钮时不会提交表单,而之后调用submitClick()方法。

click的.once修饰符

作用:事件只监听一次

  1. <button @click.once="btn2Click">
  2. 按钮2
  3. </button>

这种情况下多次点击button,只会执行一次btn2Click()方法

keydown的.enter修饰符

作用:监听键盘的点击

  1. <input type="text" @keydown.enter="keyDown">

Vue学习笔记(二)动态绑定、计算属性和事件监听的更多相关文章

  1. Blazor和Vue对比学习(基础1.8):Blazor中实现计算属性和数据监听

    1.7章<传递UI片断>,需要做几个案例,这部分暂停消化几天.我们先把基础部分相对简单的最后两章学习了. 计算属性和数据监听是Vue当中的概念,本质上都是监听数据的变化,然后做出响应.两者 ...

  2. WebView使用详解(二)——WebViewClient与常用事件监听

      登录|注册     关闭 启舰 当乌龟有了梦想……       目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8 ...

  3. vue computed计算属性和watch监听属性解疑答惑

    computed计算属性     计算属性类似于方法,用于输出data中定义的属性数据的结果,data数据变化时,计算属性的结果会同步变化,需要注意的是计算属性不可与data定义的属性同名. 相比于方 ...

  4. vue2.0 之计算属性和数据监听

    计算属性computed <template> <div> <input type="text" name="" v-model= ...

  5. android菜鸟学习笔记23----ContentProvider(三)利用内置ContentProvider监听短信及查看联系人

    要使用一个ContentProvider,必须要知道的是它所能匹配的Uri及其数据存储的表的结构. 首先想办法找到访问短信及联系人数据的ContentProvider能接受的Uri: 到github上 ...

  6. vue学习笔记(二)vue的生命周期和钩子函数

    前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...

  7. Vue学习笔记二:v-cloak,v-text,v-html的使用

    目录 v-cloak:解决插值表达式闪烁问题 安装插件Live Server 右键以HTTP形式运行HTML v-text:以属性方式使用插值表达式 v-cloak和v-text的区别 v-html: ...

  8. VUE 学习笔记 二 生命周期

    1.除了数据属性,Vue 实例还暴露了一些有用的实例属性与方法.它们都有前缀 $,以便与用户定义的属性区分开来 var data = { a: 1 } var vm = new Vue({ el: ' ...

  9. VUE学习笔记二

    package.json不可以写注释!!!!!!!!!!初始化:npm init -y 有时候使用 npm i node-sass -D 装不上,这时候,就必须使用  cnpm i node-sass ...

随机推荐

  1. 用python的matplotlib根据文件里面的数字画图像折线图

    思路:用open打开文件,再用a=filename.readlines()提取每行的数据作为列表的值,然后传递列表给matplotlib并引入对应库画出图像 代码实现:import matplotli ...

  2. Unix、Linux 软件包管理快速入门对照:apt、brew、pkg、yum

    请访问原文链接:https://sysin.org/blog/apt-brew-pkg-yum/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin ...

  3. To_Heart—题解——AT2165

    这是一篇解题报告 首先,看到标签,考虑二分答案. 我们二分答案(即塔顶的值),把大于或等于这个值的变为1,否则变为0. 很容易发现,如果塔顶的答案是1,那么就说明值可以更大,否则相反. 复制一波样例 ...

  4. 正则表达式_爬取豆瓣电影排行Top250

    前言: 利用简单的正则表达式,获取响应内容爬取数据. Part1 正则表达式(Regular Expression) 1.1 简介 正则表达式,又称规则表达式,它是一种文本模式,就是通过事先定义好的一 ...

  5. 【知识点】inline函数、回调函数、普通函数

    目录 一.inline内联函数 1.1 使用 1.2 编译器对 inline 函数处理步骤 1.3 优缺点 1.3.1 优点 1.3.2 慎用内联 1.3.3 不宜使用内联 1.4 虚函数(virtu ...

  6. 资源:VMware秘钥许可证

    一. 激活密钥 YG5H2-ANZ0H-M8ERY-TXZZZ-YKRV8 UG5J2-0ME12-M89WY-NPWXX-WQH88 UA5DR-2ZD4H-089FY-6YQ5T-YPRX6 GA ...

  7. 13 shell while循环与until循环

    while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环. unti 循环和 while 循环恰好相反,当判断条件 ...

  8. 3shell命令替换

    Shell 命令替换是指将命令的输出结果赋值给某个变量.比如,将使用ls命令查看到的某个目录中的内容保存到某个变量中,这就需要使用命令替换. Shell 中有两种方式可以完成命令替换,一种是反引号` ...

  9. docker安装应用整理

    nginx安装: docker run \ --name nginx \ --volume /var/data/nginx/nginx.conf:/etc/nginx/nginx.conf \ --v ...

  10. Hadoop知识总结

    ------------恢复内容开始------------ Hadoop知识点 Hadoop知识点什么是HadoopHadoop和Spark差异Hadoop常见版本,有哪些特点,一般是如何进行选择H ...