Vue基础知识总结 2:vue 动态绑定

🏆作者简介:哪吒,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪,专注Java硬核干货分享,立志做到Java赛道全网Top N。

🏆本文收录于,Java基础教程系列,目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

🏆姐妹篇,Java基础教程(入门篇),包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识点。

🏆姐妹进阶篇,Java基础教程(进阶篇),包含Java高并发、Spring、MySQL等Java进阶技术栈。

🏆全部订阅,可加入Java学习星球,完成Java从入门、实战、进阶全方位的Java知识体系学习。

目录

一、前言

二、百度百科

三、Vue安装

四、Vue入门语法

1、使用Vue实现hello world

2、vue列表展示

3、实现简单计数器

五、vue中的MVVM

六、理解vue生命周期

1、生命周期代码实例

2、生命周期

3、分析生命周期相关方法的执行时机

七、动态绑定属性

1、v-once

2、v-cloak

3、v-bind基础用法

4、v-bind绑定class属性

5、v-bind绑定class属性,简单写法:

6、v-bind绑定style样式


一、前言

大家好,我是哪吒,一个热爱技术的年轻人,架构师,是每一个程序员的梦想,因此,作为一个Java后端程序员,突击前端,迫在眉睫,而目前来说,最火的前端框架无疑就是Vue,我们公司前端也都是Vue,每次与前端联调的时候,因为对前端知识的匮乏,总是很无奈,不破不立,我决定花49天时间,系统的学习一下Vue。

因为酷爱斗破苍穹,这一系列就按照斗破苍穹中萧炎的成长历程为系列标题吧。

二、百度百科

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 

 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用(SPA)提供驱动。

AngularJs是Vue早期开发的灵感来源。然而,AngularJS 中存在的许多问题,在 Vue 中已经得到解决。 

Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。

Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时  ,Vue.js 也能驱动复杂的单页应用。

三、Vue安装

IDE使用WebStorm。

四、Vue入门语法

1、使用Vue实现hello world

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">{{message}}</div>

<script src="../js/vue.js"></script>
<script>
    //编程范式:声明式编程
    //var没有变量的作用域,var是js设计早期的缺陷
    // let:变量;const:常量
    let app = new Vue({
        el: '#app',//用于挂载要管理的元素
        data: {//定义数据
            message: '你好啊,哪吒'
        }
    })

    // 命令式编程
    // 1.创建div元素,设置id属性

    //2.定义一个变量叫message

    //3.将message变量放到前面的div中显示
</script>
</body>
</html>

2、vue列表展示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
  <ul>
    <li v-for="item in girls">{{item}}</li>
  </ul>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊,哪吒',
      girls: ['美杜莎','云韵','比比东','纳兰嫣然','雅妃']
    }
  })
</script>
</body>
</html>

3、实现简单计数器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<div id="app">
  <h2>当前计数:{{counter}}</h2>
  <!--<button v-on:click="counter++">+</button>
  <button v-on:click="counter--">-</button>-->
  <button v-on:click="add">+</button>
  <button v-on:click="sub">-</button>
</div>

<script src="../js/vue.js"></script>
<script>
  // proxy代理
  const app = new Vue({
    el: '#app',
    data: {
      counter: 0
    },
    methods: {
      add: function (){
        this.counter++
        console.log('add被执行')
      },
      sub: function (){
        this.counter--
        console.log('sub被执行')
      }
    }
  })

  // 1.拿button元素

  // 2.添加监听事件
</script>
</html>

五、vue中的MVVM

MVVM有助于将图形用户界面的开发与业务逻辑或后端逻辑(数据模型)的开发分离开来,这是通过置标语言或GUI代码实现的。MVVM的视图模型是一个值转换器,这意味着视图模型负责从模型中暴露(转换)数据对象,以便轻松管理和呈现对象。在这方面,视图模型比视图做得更多,并且处理大部分视图的显示逻辑。视图模型可以实现中介者模式,组织对视图所支持的用例集的后端逻辑的访问。

六、理解vue生命周期

1、生命周期代码实例

2、生命周期

3、分析生命周期相关方法的执行时机

//===创建时的四个事件
beforeCreate() { // 第一个被执行的钩子方法:实例被创建出来之前执行
    console.log(this.message) //undefined
    this.show() //TypeError: this.show is not a function
    // beforeCreate执行时,data 和 methods 中的 数据都还没有没初始化
},
created() { // 第二个被执行的钩子方法
    console.log(this.message) //床前明月光
    this.show() //执行show方法
    // created执行时,data 和 methods 都已经被初始化好了!
    // 如果要调用 methods 中的方法,或者操作 data 中的数据,最早,只能在 created 中操作
},
beforeMount() { // 第三个被执行的钩子方法
    console.log(document.getElementById('h3').innerText) //{{ message }}
    // beforeMount执行时,模板已经在内存中编辑完成了,尚未被渲染到页面中
},
mounted() { // 第四个被执行的钩子方法
    console.log(document.getElementById('h3').innerText) //床前明月光
    // 内存中的模板已经渲染到页面,用户已经可以看见内容
},
//===运行中的两个事件
beforeUpdate() { // 数据更新的前一刻
    console.log('界面显示的内容:' + document.getElementById('h3').innerText)
    console.log('data 中的 message 数据是:' + this.message)
    // beforeUpdate执行时,内存中的数据已更新,但是页面尚未被渲染
},
updated() {
    console.log('界面显示的内容:' + document.getElementById('h3').innerText)
    console.log('data 中的 message 数据是:' + this.message)
    // updated执行时,内存中的数据已更新,并且页面已经被渲染
}

七、动态绑定属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
  {{message}}
  <h2>{{firstName}} * {{lastName}}</h2>
  <h2>{{counter * 2}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好',
      firstName: '比比东',
      lastName: '美女',
      counter: 100
    }
  })
</script>
</body>
</html>

1、v-once

展示message的初始值,message值变化,界面也不会产生变化。

2、v-cloak

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    [v-cloak]{
      display: none;
    }
  </style>
</head>
<body>
<div id="app" v-cloak>
  {{message}}
</div>

<script src="../js/vue.js"></script>
<script>
  //在vue解析之前,div中有一个属性v-cloak
  //在vue解析之后,div中没有一个属性v-cloak
  setTimeout(function(){
    const app = new Vue({
      el: '#app',
      data: {
        message: '你好'
      }
    })
  },1000)

</script>
</body>
</html>

3、v-bind基础用法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <!-- 错误的写法,这里不可以用mustache语法 -->
  <!--{{imgUrl}}-->
  <!-- v-bind -->
  <img v-bind:src="imgUrl" alt="">

  <img :src="imgUrl" alt="">

  <a v-bind:href="aHref">百度一下</a>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好',
      imgUrl: 'D:\\CSDN\\static\\美杜莎1.jpg',
      aHref: 'http://www.baidu.com'
    }
  })
</script>
</body>
</html>

4、v-bind绑定class属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .active{
      color: red;
    }
    .line{
      text-decoration: underline;
    }
  </style>
</head>
<body>
<div id="app">
  <h2 v-bind:class="{active:isActive,line:isLine}">{{message}}</h2>
  <button v-on:click="btnClick">按钮</button>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好',
      isActive: true,
      isLine: true
    },
    methods: {
      btnClick: function (){
        this.isActive = !this.isActive
      }
    }
  })
</script>
</body>
</html>

5、v-bind绑定class属性,简单写法:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .active{
      color: red;
    }
    .line{
      text-decoration: underline;
    }
  </style>
</head>
<body>
<div id="app">
  <h2 class="title" v-bind:class="{active:isActive,line:isLine}">{{message}}</h2>
  <h2 class="title" v-bind:class="getClasses()">{{message}}</h2>
  <button v-on:click="btnClick">按钮</button>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好',
      isActive: true,
      isLine: true
    },
    methods: {
      btnClick: function (){
        this.isActive = !this.isActive
      },
      getClasses: function (){
        return {active:this.isActive,line:this.isLine}
      }
    }
  })
</script>
</body>
</html>

效果也是一样的。

6、v-bind绑定style样式

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <h2 :style="{fontSize: finalSize + 'px', backgroundColor: finalColor}">{{message}}</h2>
  <h2 :style="getStyles()">{{message}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: 'CSDN哪吒',
      finalSize: 50,
      finalColor: 'red'
    },
    methods: {
      getStyles: function (){
        return {fontSize: this.finalSize + 'px', backgroundColor: this.finalColor}
      }
    }
  })
</script>
</body>
</html>

上一篇:Vue基础知识总结 1:Vue入门

下一篇:Vue知识体系总结 3:Vue常用标签

🏆作者简介:哪吒,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪,专注Java硬核干货分享,立志做到Java赛道全网Top N。

🏆本文收录于,Java基础教程系列,目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

🏆姐妹篇,Java基础教程(入门篇),包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识点。

🏆姐妹进阶篇,Java基础教程(进阶篇),包含Java高并发、Spring、MySQL等Java进阶技术栈。

🏆全部订阅,可加入Java学习星球,完成Java从入门、实战、进阶全方位的Java知识体系学习。

  • 80
    点赞
  • 314
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 70
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 70
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值