• vue模板语法上集


    目录

    一、插值

    1、 文本

              {{msg}}

     2 、html

              使用v-html指令用于输出html代码

    3、 属性

              HTML属性中的值应使用v-bind指令

    两种方式: 

    4 、表达式

              Vue提供了完全的JavaScript表达式支持         

     5、class绑定

      使用方式:v-bind:class="expression"

      expression的类型:字符串、数组、对象

    6 style绑定

      v-bind:style="expression"

      expression的类型:字符串、数组、对象

    二、指令

    v-if

    v-show        

    v-if和v-show的区别(面试题)

      v-for

    三、过滤器

    全局过滤器

    四、计算属性&监听器属性

       computed:{}

       watch:{}

    五、购物车案例


    一、插值

    1、 文本


              {{msg}}


     2 、html


              使用v-html指令用于输出html代码

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>文本p>
    11. {{msg}}
    12. <p>html页面转义p>
    13. <div v-html="htmlstr">div>
    14. div>
    15. body>
    16. <script type="text/javascript">
    17. new Vue({
    18. el:'#app',
    19. data(){
    20. return {
    21. msg:'hello vue ~',
    22. htmlstr:'文本内容'
    23. }
    24. }
    25. })
    26. script>
    27. html>

    031b79e222b0493fa0068067b046fe7a.png

    3、 属性


              HTML属性中的值应使用v-bind指令

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>文本p>
    11. {{msg}}
    12. <p>html页面转义p>
    13. <div v-html="htmlstr">div>
    14. <p>v-bind 属性绑定p>
    15. <input value="值" />
    16. <input v-bind:value="valuestr" />
    17. <input :value="valuestr" />
    18. div>
    19. body>
    20. <script type="text/javascript">
    21. new Vue({
    22. el:'#app',
    23. data(){
    24. return {
    25. msg:'hello vue ~',
    26. htmlstr:'文本内容',
    27. valuestr:'vue值'
    28. }
    29. }
    30. })
    31. script>
    32. html>

    两种方式: 

    9c1ea3734d1940e39a91f1ebd4d88cd9.png

    运行:

    d7eecdd9763f4e59a190f3b74aad5fbd.png
     

    4 、表达式


              Vue提供了完全的JavaScript表达式支持
             

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>文本p>
    11. {{msg}}
    12. <p>html页面转义p>
    13. <div v-html="htmlstr">div>
    14. <p>v-bind 属性绑定p>
    15. <input value="值" />
    16. <input v-bind:value="valuestr" />
    17. <input :value="valuestr" /><br />
    18. <p>Vue中可以对变量进行二次处理p>
    19. {{str.substring(0,4)}}
    20. {{num +4}}<br />
    21. {{ok?'1':'0'}}<br />
    22. <span :id="idstr+'id'">书籍信息span>
    23. div>
    24. body>
    25. <script type="text/javascript">
    26. new Vue({
    27. el:'#app',
    28. data(){
    29. return {
    30. msg:'hello vue ~',
    31. htmlstr:'文本内容',
    32. valuestr:'vue值',
    33. str:'hello 杨总!',
    34. num:6,
    35. ok:false,
    36. idstr:'book_'
    37. }
    38. }
    39. })
    40. script>
    41. html>

     运行:89a8d81bfb9d4209a4ff5a511fa5624a.png

    306ec2f500454724bb5bb6811294d868.png

     5、class绑定

      使用方式:v-bind:class="expression"

      expression的类型:字符串、数组、对象

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. <style>
    8. .a{
    9. color: palevioletred;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p>文本p>
    16. {{msg}}
    17. <p>html页面转义p>
    18. <div v-html="htmlstr">div>
    19. <p>v-bind 属性绑定p>
    20. <input value="值" />
    21. <input v-bind:value="valuestr" />
    22. <input :value="valuestr" /><br />
    23. <p>Vue中可以对变量进行二次处理p>
    24. {{str.substring(0,4)}}
    25. {{num +4}}<br />
    26. {{ok?'1':'0'}}<br />
    27. <span :id="idstr+'id'">书籍信息span>
    28. <p>class绑定p>
    29. <span :class="classStr">文本内容span>
    30. div>
    31. body>
    32. <script type="text/javascript">
    33. new Vue({
    34. el:'#app',
    35. data(){
    36. return {
    37. msg:'hello vue ~',
    38. htmlstr:'文本内容',
    39. valuestr:'vue值',
    40. str:'hello 杨总!',
    41. num:6,
    42. ok:false,
    43. idstr:'book_',
    44. classStr:'a'
    45. }
    46. }
    47. })
    48. script>
    49. html>

    运行:

    9fdb1e8a03634c4d914de24572e07f75.png

      

    6 style绑定

      v-bind:style="expression"

      expression的类型:字符串、数组、对象

    90dd14adb3fd4d4c9a10c2193d8280da.png

    eb7ffe8421d8477e8bbf838bb8b6b4ce.png


      

    二、指令

    指的是带有“v-”前缀的特殊属性
      
      .1 核心指令
              (v-if|v-else|v-else-if)/v-show/v-for/v-bind/v-on/v-model

              v-if|v-else|v-else-if:根据其后表达式的bool值进行判断是否渲染该元素
                他们只能是兄弟元素
                v-else-if上一个兄弟元素必须是v-if
                v-else上一个兄弟元素必须是v-if或者是v-else-if

    v-if

    案例:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. <style>
    8. .a{
    9. color: palevioletred;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p>v-ifp>
    16. 请输入分数:<input v-model="score"/>
    17. 对应的结果:
    18. <span v-if="score<60">不及格span>
    19. <span v-else-if="score<70">合格span>
    20. <span v-else-if="score<80">span>
    21. <span v-else-if="score<90">优秀span>
    22. <span v-else-if="score<=100">优+span>
    23. <span v-else="">输入不合法!span>
    24. div>
    25. body>
    26. <script type="text/javascript">
    27. new Vue({
    28. el:'#app',
    29. data(){
    30. return {
    31. score:0
    32. }
    33. }
    34. })
    35. script>
    36. html>

     运行:

    fb05ddb221af413391e73732d6800007.png

     b5cab7796cc34c21a5f58428c8e9cfba.png

     cd64b76ba7f6454e8b073d435805a474.png

     fd454dcf5c844caba1fe951e780c9980.png

     fa1748b1264248f3ab3753cea08aef09.png

     1736dda1a06a4940a5c89799937de56a.png

    v-show        

      v-show:与v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none"

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. <style>
    8. .a{
    9. color: palevioletred;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p>v-showp>
    16. 请输入结果:<input v-model="showflag"/>
    17. <span v-show="showflag">show:展示与否span>
    18. <span v-if="showflag">if:展示与否span>
    19. div>
    20. body>
    21. <script type="text/javascript">
    22. new Vue({
    23. el:'#app',
    24. data(){
    25. return {
    26. showflag:false
    27. }
    28. }
    29. })
    30. script>
    31. html>

    运行: 

    69c8380203ac483386d708a815e3ad42.png

    v-if和v-show的区别(面试题)

    v-show在展示里面能够形成html的字符串,通过display:none这个样式隐藏掉了这个标签

    v-if是不能的,其标签是直接没有了

      v-for

       v-for:类似JS的遍历,
                     遍历数组: v-for="item in items", items是数组,item为数组中的数组元素
                     遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>v-forp>
    11. <select>
    12. <option v-for="l in likes" :value="l.id">{{l.name}}option>
    13. select>
    14. <br />
    15. <div v-for="l in likes">
    16. <input type="checkbox" :value="l.id"/>{{l.name}}
    17. div>
    18. div>
    19. body>
    20. <script type="text/javascript">
    21. new Vue({
    22. el: '#app',
    23. data() {
    24. return {
    25. likes: [{
    26. id: 1,
    27. name: '唱歌'
    28. },
    29. {
    30. id: 2,
    31. name: '跳舞'
    32. },
    33. {
    34. id: 3,
    35. name: '乒乓球'
    36. },
    37. {
    38. id: 4,
    39. name: 'Breaking'
    40. }
    41. ]
    42. }
    43. }
    44. })
    45. script>
    46. html>

    运行:

    f8fb578a441e4cc9ab8d5a36d6705c31.png

     b6c4c878d9264100a78902a75fa3a5d5.png

     
      

    三、过滤器

    全局过滤器

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. <style>
    8. .a {
    9. color: palevioletred;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. {{msg|strSplit|strSplit2}}
    16. div>
    17. body>
    18. <script type="text/javascript">
    19. Vue.filter('strSplit',function(value){
    20. console.log(value);
    21. return value.substring(0,5);
    22. })
    23. Vue.filter('strSplit2',function(value){
    24. console.log(value);
    25. return value.substring(0,5);
    26. })
    27. new Vue({
    28. el: '#app',
    29. data() {
    30. return {
    31. msg:'hello 杨总 ~'
    32. }
    33. }
    34. })
    35. script>
    36. html>

    fdba3d13035743839c871cb991eae956.png

     d45563062e6a479fb9f73d40e17839e1.png

     运行:

    4ffccf1d8e1d4e5cb35493e1d4839bff.png

    四、计算属性&监听器属性

    计算属性

       计算属性可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新

       computed:{}

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. <style>
    8. .a {
    9. color: palevioletred;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p计算属性>p>
    16. 请输入第一个数:<input v-model="x"/><br />
    17. 请输入第二个数:<input v-model="y"/><br />
    18. 结果为:{{addFlag}}
    19. div>
    20. body>
    21. <script type="text/javascript">
    22. new Vue({
    23. el: '#app',
    24. data() {
    25. return {
    26. x:0,
    27. y:0
    28. }
    29. },computed:{
    30. // 计算属性
    31. addFlag:function(){
    32. return parseInt(this.x)+parseInt(this.y);
    33. }
    34. }
    35. })
    36. script>
    37. html>

       运行:

    90f8902a653a40e8a0909c625f2ed943.png

    监听属性

       监听属性 watch,我们可以通过 watch 来响应数据的变化

       watch:{}

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. <style>
    8. .a {
    9. color: palevioletred;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p>计算属性p>
    16. 请输入第一个数:<input v-model="x"/><br />
    17. 请输入第二个数:<input v-model="y"/><br />
    18. 结果为:{{addFlag}}
    19. <p>监听器属性p>
    20. 请输入第一个数:<input v-model="km"/><br />
    21. 请输入第二个数:<input v-model="m"/><br />
    22. div>
    23. body>
    24. <script type="text/javascript">
    25. new Vue({
    26. el: '#app',
    27. data() {
    28. return {
    29. x:0,
    30. y:0,
    31. km:0,
    32. m:0
    33. }
    34. },computed:{
    35. // 计算属性
    36. addFlag:function(){
    37. return parseInt(this.x)+parseInt(this.y);
    38. }
    39. },
    40. watch:{
    41. km:function(v){
    42. // :之前对应的是被监听的属性,v指的是被监听的属性的值
    43. // 当v对应的值发生变化的时候,会执行这个方法
    44. // v代表千米
    45. this.m=parseInt(v)*1000
    46. },
    47. m:function(v){
    48. this.km=parseInt(v)/1000;
    49. }
    50. }
    51. })
    52. script>
    53. html>

     运行:

     98ca73803edc4546a4510259d6000f83.png

    五、购物车案例

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>购物车p>
    11. <table border="1px">
    12. <tr>
    13. <td>物品td>
    14. <td>单价td>
    15. <td>数量td>
    16. <td>小计td>
    17. tr>
    18. <tr>
    19. <td>帽子td>
    20. <td>{{maoziDanjia}}td>
    21. <td>
    22. <input v-model="maoziShuliang"/>
    23. td>
    24. <td>{{maoziXiaoji}}td>
    25. tr>
    26. <tr>
    27. <td>衣服td>
    28. <td>{{yifuDanjia}}td>
    29. <td>
    30. <input v-model="yifuShuliang"/>
    31. td>
    32. <td>{{yifuXiaoji}}td>
    33. tr>
    34. <tr>
    35. <td>裙子td>
    36. <td>{{qunziDanjia}}td>
    37. <td>
    38. <input v-model="qunziShuliang"/>
    39. td>
    40. <td>{{qunziXiaoji}}td>
    41. tr>
    42. <tr>
    43. <td>总价td>
    44. <td colspan="3">
    45. {{zongJia}}
    46. td>
    47. tr>
    48. table>
    49. div>
    50. body>
    51. <script type="text/javascript">
    52. new Vue({
    53. el: '#app',
    54. data() {
    55. return {
    56. maoziDanjia:20,
    57. yifuDanjia:299,
    58. qunziDanjia:462,
    59. maoziShuliang:1,
    60. yifuShuliang:1,
    61. qunziShuliang:1
    62. }
    63. },computed:{
    64. // 计算属性
    65. // 因为数量 会影响小计,小计不会影响数量,所以使用计算属性
    66. maoziXiaoji:function(){
    67. return parseInt(this.maoziDanjia)*parseInt(this.maoziShuliang);
    68. },
    69. yifuXiaoji:function(){
    70. return parseInt(this.yifuDanjia)*parseInt(this.yifuShuliang);
    71. },
    72. qunziXiaoji:function(){
    73. return parseInt(this.qunziDanjia)*parseInt(this.qunziShuliang);
    74. },
    75. zongJia:function(){
    76. return parseInt(this.yifuXiaoji)+parseInt(this.maoziXiaoji)+parseInt(this.qunziXiaoji);
    77. }
    78. },
    79. watch:{
    80. km:function(v){
    81. // :之前对应的是被监听的属性,v指的是被监听的属性的值
    82. // 当v对应的值发生变化的时候,会执行这个方法
    83. // v代表千米
    84. this.m=parseInt(v)*1000
    85. },
    86. m:function(v){
    87. this.km=parseInt(v)/1000;
    88. }
    89. }
    90. })
    91. script>
    92. html>

    运行: 

  • 相关阅读:
    7种系统设计中的数据库范式
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    图论基础(python蓝桥杯)
    网络基础(一)
    初识JVM
    spring学习小笔记
    企业申请车辆前雾灯E-mark认证的前提条件
    批量重命名与翻译文件技巧大揭秘
    Promise面试题
    Gateway 整合 Sentinel 实现网关限流
  • 原文地址:https://blog.csdn.net/weixin_65808248/article/details/126652414