• Vue中动态绑定属性


    1. v-bind的基本使用

    ​ 某些时候我们并不想将变量放在标签内容中,像这样

    {{message}}

    是将变量h2标签括起来,类似js的innerHTML。但是我们期望将变量imgURL写在如下位置,想这样导入图片是希望动态获取图片的链接,此时的imgURL并非变量而是字符串imgURL,如果要将其生效为变量,需要使用到一个标签v-bind:,像这样,而且这里也不能使用Mustache语法,类似,这也是错误的。

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>v-bind的基本使用title>
    8. head>
    9. <body>
    10. <div id="app">
    11. <img v-bind:src="imgURL" alt="">
    12. <a v-bind:href="aHerf">a>
    13. <img :src="imgURL" alt="">
    14. <a :href="aHerf">a>
    15. div>
    16. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
    17. <script>
    18. const app = new Vue({
    19. el:"#app",
    20. data:{
    21. message:"你好啊",
    22. imgURL:"https://cn.bing.com/th?id=OIP.NaSKiHPRcquisK2EehUI3gHaE8&pid=Api&rs=1",
    23. aHerf:"http://www.baidu.com"
    24. }
    25. })
    26. script>
    27. body>
    28. html>
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. <style>
    7. .active {
    8. color: #FF0000;
    9. }
    10. style>
    11. head>
    12. <body>
    13. <div id="app">
    14. <ul>
    15. <li v-for="(item, index) in movies" :key="index" :class="index === currentIndex ? 'active' : ''" @click="change(index)">{{index+"---"+item}}li>
    16. ul>
    17. div>
    18. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
    19. <script>
    20. const app = new Vue({
    21. el:"#app",
    22. data:{
    23. currentIndex:0,
    24. movies:[
    25. "海王","海贼王","火影忍者","复仇者联盟"
    26. ]
    27. },
    28. methods:{
    29. change(index){
    30. this.currentIndex = index
    31. }
    32. }
    33. })
    34. script>
    35. body>
    36. html>

    ​ 此时vue对象中定义的imgURL变量和aHerf变量可以动态的绑定到img标签的src属性和a标签的href属性。v-bind:由于用的很多,vue对他有一个语法糖的优化写法也就是:,此时修改imgURL变量图片会重新加载。

     2. v-bind动态绑定class

    2.1.v-bind动态绑定class(字符串写法)

    字符串写法,适用于:样式的类名不确定,需要动态指定

    1. <div id="app">
    2. <h2 :class="mood">{{name}}h2>
    3. div>
    4. <script>
    5. const vm = new Vue({
    6. el: '#app',
    7. data() {
    8. return {
    9. name:'张三',
    10. mood:'active',
    11. }
    12. },
    13. })

    2.2. v-bind动态绑定class(对象写法)

    ​ 有时候我们期望对Dom元素的节点的class进行动态绑定,选择此Dom是否有指定class属性。例如,给h2标签加上class="active",当Dom元素有此class时候,变红,在写一个按钮绑定事件,点击变黑色,再次点击变红色。

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>v-bind动态绑定class(对象语法)title>
    8. <style>
    9. .active{
    10. color:red;
    11. }
    12. style>
    13. head>
    14. <body>
    15. <div id="app">
    16. <h2 class="title" :class="{active:isActive}">{{message}}h2>
    17. <h2 class="title" :class="getClasses()">{{message}}h2>
    18. <button @click="change">点击变色button>
    19. div>
    20. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
    21. <script>
    22. const app = new Vue({
    23. el:"#app",
    24. data:{
    25. message:"你好啊",
    26. active:"active",
    27. isActive:true
    28. },
    29. methods: {
    30. change(){
    31. this.isActive = !this.isActive
    32. },
    33. getClasses(){
    34. return {active:this.isActive}
    35. }
    36. },
    37. })
    38. script>
    39. body>
    40. html>

    ​ 定义两个变量activeisActive,在Dom元素中使用:class={active:isActive},此时绑定的class='active',isActive为true,active显示,定义方法change()绑定在按钮上,点击按钮this.isActive = !this.isActive,控制Dom元素是否有class='active'的属性。

     对象写法,适用于:要绑定的样式个数确定、名字也确定,但要动态决定用不用

    1. <div id="app">
    2. <h2 :class="classobj">{{name}}h2>
    3. div>
    4. <script>
    5. const vm = new Vue({
    6. el: '#app',
    7. data() {
    8. return {
    9. name:'张三',
    10. classobj:{
    11. active:false,
    12. active1:false,
    13. active2:false,
    14. active3:false,
    15. }
    16. }
    17. },
    18. })

    2.3. v-bind动态绑定class(数组用法)

    ​ class属性中可以放数组,会依次解析成对应的class。

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>v-bind动态绑定class(数组用法)title>
    8. <style>
    9. style>
    10. head>
    11. <body>
    12. <div id="app">
    13. <h2 class="title" :class="['active','line']">{{message}}h2>
    14. <h2 class="title" :class="[active,line]">{{message}}h2>
    15. <h2 class="title" :class="getClasses()">{{message}}h2>
    16. div>
    17. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
    18. <script>
    19. const app = new Vue({
    20. el:"#app",
    21. data:{
    22. message:"你好啊",
    23. active:"aaaa",
    24. line:'bbbb'
    25. },
    26. methods: {
    27. getClasses(){
    28. return [this.active,this.line]
    29. }
    30. },
    31. })
    32. script>
    33. body>
    34. html>

    1. ​ 加上单引号的表示字符串

    2. ​ 不加的会当成变量

    3. ​ 可以直接使用方法返回数组对象

     

    数组写法,适用于:要绑定的样式个数不确定、名字也不确定

    1. <div id="app">
    2. <h2 :class="classarr">{{name}}h2>
    3. div>
    4. <script>
    5. const vm = new Vue({
    6. el: '#app',
    7. data() {
    8. return {
    9. name:'张三',
    10. classarr:['active1','active2','active3']
    11. }
    12. },
    13. })
    14. script>

    3. v-for和v-bind结合

    使用v-for和v-bind实现一个小demo,将电影列表展示,并点击某一个电影列表时候,将此电影列表变成红色。

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>作业(v-for和v-bind的结合)title>
    8. <style>
    9. .active{
    10. color:red;
    11. }
    12. style>
    13. head>
    14. <body>
    15. <div id="app">
    16. <ul>
    17. <li v-for="(item, index) in movies" :key="index" :class="{active:index===currentIndex}" @click="changeColor(index)" >{{index+"---"+item}}li>
    18. ul>
    19. div>
    20. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
    21. <script>
    22. const app = new Vue({
    23. el:"#app",
    24. data:{
    25. currentIndex:0,
    26. movies:["海王","海贼王","火影忍者","复仇者联盟"]
    27. },
    28. methods: {
    29. changeColor(index){
    30. this.currentIndex = index
    31. }
    32. },
    33. })
    34. script>
    35. body>
    36. html>

     4. v-bind动态绑定style

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

    1. <h2 :style="{fontSize:'50px'}">{{message}}h2>
    2. <h2 :style="{fontSize:fontSize}">{{message}}h2>
    3. <h2 :style="getStyle()">{{message}}h2>

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

    1. <div id="app">
    2. <h2 :style="[baseStyle]">{{message}}h2>
    3. <h2 :style="getStyle()">{{message}}h2>
    4. div>
    5. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
    6. <script>
    7. const app = new Vue({
    8. el:"#app",
    9. data:{
    10. message:"你好啊",
    11. baseStyle:{backgroundColor:'red'}
    12. },
    13. methods: {
    14. getStyle(){
    15. return [this.baseStyle]
    16. }
    17. },
    18. })
    19. script>

    类似绑定class,绑定style也是一样的。

  • 相关阅读:
    光伏系统MPPT、恒功率控制切换Simulink仿真
    2020华数杯全国大学生数学建模竞赛B题-工业零件切割优化方案设计(一)
    自定义结构体的json序列化
    Webpack关闭SourceMap
    nvm的安装、使用及常见问题汇总
    TiDB Lightning Web 界面
    宠物寄养小程序实战教程(上篇)
    JAVA集合框架工具类自定义Collections集合方法
    Playcanvas后处理-辉光bloom
    C# Winform应用程序简介
  • 原文地址:https://blog.csdn.net/helongzhi/article/details/126007180