• Vue模板语法


    昨天与大家分享了Vue入门,今天继续与大家分享关于部分Vue模板语法

    目录

    一、Vue插值

    二、Vue指令 

    三、过滤器

     四、计算器&&监听器

    1、运用计算器原理实现购物车

     2、运用监听器实现米和千米单位换算


    一、Vue插值

    Vue插值中主要包括以下几个方法的应用

       1.1.1 文本

              {{msg}}

        1.1.2 html

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

        1.1.3 属性

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

        1.1.4 表达式

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

              {{str.substr(0,6).toUpperCase()}}

              {{ number + 1 }}

              {{ ok ? 'YES' : 'NO' }}

              

  • 我的Id是js动态生成的
  • 1.1.5 class绑定

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

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

      

    1.1.6 style绑定

      v-bind:style="expression"

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

    html代码演示:

    1. <!DOCTYPE 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 :yellow;
    10. }
    11. </style>
    12. </head>
    13. <body>
    14. <div id="app">
    15. <p>文本</p>
    16. {{msg}}
    17. <p>htmlstr串</p>
    18. <div v-html="htmlstr"></div>
    19. <p>v-bind 属性绑定</p>
    20. <input v-bind:value="valuestr"/>
    21. <input :value="valuestr">
    22. <p>表达式</p>
    23. {{str.substring(0,4).toUpperCase()}}
    24. 小朱:{{number+1}}
    25. {{ok?'1':'0'}}
    26. <span :id="idstr+'id'"></span>
    27. <p>class绑定</p>
    28. <span class="classStr">文本内容</span>
    29. <p>style绑定</p>
    30. <span style="classStr">文本内容</span>
    31. </div>
    32. <script type="text/javascript">
    33. new Vue({
    34. el:'#app',
    35. data(){
    36. return {
    37. msg:"hello vue!!!",
    38. htmlstr:'

      小猪

      '
      ,
    39. valuestr:'小猪小猪胖乎乎',
    40. str:'吃完睡觉呼噜噜',
    41. number:66,
    42. ok:false,
    43. idstr:'list_',
    44. classStr:'a',
    45. }
    46. }
    47. })
    48. </script>
    49. </body>
    50. </html>

    运行效果:

     

    二、Vue指令 

      指的是带有“v-”前缀的特殊属性

    核心指令

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

      v-for:类似JS的遍历,

     遍历数组: v-for="item in items", items是数组,item为数组中的数组元素

     遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标

      v-bind

      v-on

      v-model:用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值   

    v-for/v-model一起绑定[多选]复选框和单选框  

    html代码演示:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    7. </head>
    8. <body>
    9. <div id="app">
    10. <p>v-if的使用</p>
    11. 请输入分数:<input v-model="score" />
    12. <span v-if="score<60">不及格</span>
    13. <div v-else-if="score<70">合格</div>
    14. <span v-else-if="score<80">良好</span>
    15. <span v-else-if="score<90">优秀</span>
    16. <span v-else-if="score<=100">+</span>
    17. <span v-else="">输入不合法</span>
    18. <p>v-show</p>
    19. 请输入结果:<input v-model="showflag">
    20. <span v-show="showflag">show:展示与否</span>
    21. <span v-if="showflag">if:展示与否</span>
    22. <p>v-for</p>
    23. <select>
    24. <option v-for="l in likes" :value="l.id">{{l.name}}</option>
    25. </select>
    26. <br>
    27. <div v-for="l in likes">
    28. <input type="checkboox" :value="l.id" /> {{l.name}}
    29. </div>
    30. </div>
    31. </body>
    32. <script type="text/javascript">
    33. new Vue({
    34. el: '#app',
    35. data() {
    36. return {
    37. score: 20,
    38. showflag: false,
    39. likes[{
    40. id = 1,
    41. name = "跳舞"
    42. }, {
    43. id = 2,
    44. name = "sing"
    45. }, {
    46. id = 3,
    47. name = "baskestball"
    48. }, {
    49. id = 4,
    50. name = "football"
    51. }, ]
    52. }
    53. }
    54. })
    55. </script>
    56. </html>

    三、过滤器

    过滤器

    全局过滤器

    Vue.filter('filterName', function (value) {

     // value 表示要过滤的内容

    });

    局部过滤器

    new Vue({

     filters:{'filterName':function(value){}}

    });

    vue允许你自定义过滤器,被用作一些常见的文本格式化,格式如下:

    {{ name | capitalize }}

    注1:过滤器函数接受表达式的值作为第一个参数

    注2:过滤器可以串联     

    {{ message | filterA | filterB }}

    注3:过滤器是JavaScript函数,因此可以接受参数:

    {{ message | filterA('arg1', arg2) }}

    html代码演示:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    7. </head>
    8. <body>
    9. <div id="app">
    10. {{msg|all}},{{msg|all1}},{{msg|all|all1}},{{msg|all2(4,5)}}
    11. </div>
    12. <script type="text/javascript">
    13. Vue.filter('all', function(value) {
    14. return value.substring(1, 4);
    15. });
    16. new Vue({
    17. el: '#app',
    18. data() {
    19. return {
    20. msg:'小朱天天开心发大财'
    21. }
    22. }
    23. filters:{
    24. 'all1':function(val){
    25. return val.substring(2,3);
    26. },
    27. 'all2':function(val,start,end){
    28. return val.substring(start,end);
    29. }
    30. }
    31. })
    32. </script>
    33. </body>
    34. </html>

     四、计算器&&监听器

    1、运用计算器原理实现购物车

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

       computed:{}

    1. <div id="app">
    2. <p>计算属性</p>
    3. <table border="1" style="width: 600px;height: 300px;">
    4. <tr>
    5. <td>物品</td>
    6. <td>单价</td>
    7. <td>
    8. 数量
    9. </td>
    10. <td>
    11. 小计
    12. </td>
    13. </tr>
    14. <tr>
    15. <td>帽子</td>
    16. <td>{{maoziDanjia}}</td>
    17. <td>
    18. <input v-model="maozi" />
    19. </td>
    20. <td>
    21. {{maoziTotal}}
    22. </td>
    23. </tr>
    24. <tr>
    25. <td>衣服</td>
    26. <td>{{yifuDanjia}}</td>
    27. <td>
    28. <input v-model="yifu" />
    29. </td>
    30. <td>
    31. {{yifuTotal}}
    32. </td>
    33. </tr>
    34. <tr>
    35. <td>裤子</td>
    36. <td>{{kuziDanjia}}</td>
    37. <td>
    38. <input v-model="kuzi" />
    39. </td>
    40. <td>
    41. {{kuziTotal}}
    42. </td>
    43. </tr>
    44. <tr>
    45. <td>总价</td>
    46. <td colspan="3">{{total}}</td>
    47. </tr>
    48. </table>
    49. </div>
    50. <script type="text/javascript">
    51. new Vue({
    52. el:"#app",
    53. data(){
    54. return{
    55. maoziDanjia:10,
    56. yifuDanjia:30,
    57. kuziDanjia:20,
    58. maozi:1,
    59. yifu:1,
    60. kuzi:1,
    61. };
    62. },
    63. computed:{
    64. maoziTotal(){
    65. return this.maoziDanjia*this.maozi;
    66. },
    67. yifuTotal(){
    68. return this.yifuDanjia*this.yifu;
    69. },
    70. kuziTotal(){
    71. return this.kuziDanjia*this.kuzi;
    72. },
    73. total(){
    74. return this.maoziTotal+this.yifuTotal+this.kuziTotal;
    75. }
    76. },
    77. )}

     效果演示:

     2、运用监听器实现米和千米单位换算

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

       watch:{}

    1. <div id="app">
    2. <p>监听属性</p>
    3. 千米:<input v-model="km" />
    4. 米:<input v-model="m" />
    5. </div>
    6. <script type="text/javascript">
    7. new Vue({
    8. el:"#app",
    9. data(){
    10. return{
    11. maoziDanjia:10,
    12. km:2,
    13. m:2000
    14. };
    15. },
    16. watch:{
    17. // v指的是m变量
    18. m: function(v){
    19. this.km = parseInt(v)/1000;
    20. },
    21. // v指的是km变量
    22. km: function(v){
    23. this.m = parseInt(v)*1000;
    24. }
    25. }
    26. })

    运行效果:

     

  • 相关阅读:
    18 【移动Web开发之流式布局】
    4、Netty 线程模型
    2023年软考时间流程安排:
    C++ 四种类型转换
    后疫情时代,云计算如何为在线教育保驾护航
    TRex学习之旅四
    华为云云耀云服务器L实例评测|华为云上安装kafka
    05-jQuery的ajax
    Explore EP9442 HDMI 1.4 矩阵芯片
    【事务】- mysql事务和neo4j事务冲突导致mysql事务不生效
  • 原文地址:https://blog.csdn.net/m0_67477525/article/details/126669610