Vue的插值、指令、过滤器、计算属性及监听属性,包涵所有基础技术

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Vue的插值、指令、过滤器、计算属性及监听属性,包涵所有基础技术

一、插值

1.1  讲述

Vue的插值是一种将数据动态绑定到HTML模板中的方式。通过插值,可以将Vue实例中的数据直接显示在HTML模板中,实现数据与视图的同步更新。

Vue的插值使用双大括号{{}}来表示,可以在HTML标签的属性值和文本内容中使用。在插值中,可以使用Vue实例中的数据属性、计算属性和方法,也可以使用JavaScript表达式。

插值的作用包括但不限于以下几个方面:

  • 1. 数据绑定:通过插值,可以将Vue实例中的数据与HTML模板进行绑定,实现数据的自动更新。当数据发生变化时,插值会自动更新对应的HTML内容,使页面保持最新的状态。
  • 2. 动态文本:通过插值,可以将动态的文本内容显示在HTML模板中。可以使用插值来显示用户输入的数据、数据库中的数据或者通过API获取的数据等。
  • 3. 表达式计算:插值中可以使用JavaScript表达式,可以进行一些简单的计算和逻辑判断。可以通过插值来实现动态的样式计算、条件渲染和数据过滤等。
  • 4. 数据格式化:可以在插值中使用过滤器来格式化数据,例如日期格式化、数字格式化和文本截断等。通过插值和过滤器的组合,可以方便地处理各种数据的展示需求

总之,Vue的插值是一种方便而强大的数据绑定方式,可以将Vue实例中的数据动态地显示在HTML模板中,实现数据与视图的同步更新。通过插值,可以实现动态文本、表达式计算和数据格式化等功能。

1.2  实例

流程 :

Vue的插值流程如下:

  • 1. 解析模板:在Vue应用程序中,首先会解析模板,将模板转换为虚拟DOM(Virtual DOM)树。模板可以是HTML字符串,也可以是在Vue实例中定义的template选项。
  • 2. 创建Vue实例:在解析模板之后,会创建Vue实例。Vue实例是Vue应用程序的入口,用于管理数据和处理视图。
  • 3. 数据绑定:在创建Vue实例时,会建立数据与视图的双向绑定关系。Vue会遍历虚拟DOM树,查找其中的插值表达式,然后将这些表达式与Vue实例中的数据属性建立绑定关系。
  • 4. 数据更新:一旦数据发生变化,Vue会自动更新与之相关的插值表达式。Vue会使用响应式系统来检测数据的变化,并触发相应的更新操作。
  • 5. 更新视图:当数据更新时,Vue会重新渲染虚拟DOM树,并比较新旧虚拟DOM树的差异。然后,Vue会将差异应用到实际的DOM树上,更新视图。
  • 6. 渲染HTML:最后,Vue会将更新后的DOM树渲染到浏览器中,展示给用户。

总结起来,Vue的插值流程包括解析模板、创建Vue实例、建立数据绑定关系、数据更新、更新视图和渲染HTML。通过这个流程,Vue实现了数据与视图的同步更新,使得页面能够动态地显示数据的变化。通过插值,开发者可以方便地将Vue实例中的数据动态地显示在HTML模板中,实现数据驱动的视图更新。

演示 :

创建一个HTML文件,编写以下代码 :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    <title>插值</title>
    <style>
      .f20{
        font-size: 20px;
      }
    </style>
  </head>
  <body>
    <!-- 定义边界 -->
        <div id="app">
          <h1>文本:</h1>
          <h3>{{msg}}</h3>
          <h1>html串:</h1>
          <div v-html="string"></div>
          <h1>vue中的属性:</h1>
          <!-- 所有原生态的属性,要利用vue的变量,都需要写对应的属性v-html或:class -->
          <div v-html="string" :class="stringf20"></div>
          <h1>表达式:</h1>
          ikun:{{number+1}}<br/>
          {{str.substring(0,4)}}<br/>
          <input v-model="ok"/>
          {{ok ? '今晚足浴' : '今晚按摩'}}<br/>
        </div>
    <script type="text/javascript">
        // 构建vue实例并绑定边界
        new Vue({
          el: '#app',
          data() {
            return {
              msg: '披坚执锐',
              string:'<h3 style="color:blue;">披坚执锐,百战当先</h3>',
              stringf20:'f20',
              number:59,
              str:'我爱洗澡,皮肤好好',
              ok:false,
            };
          }
        })
      </script>
  </body>
</html>

效果如图:

二、指令

2.1  概述

在Vue中,指令(Directive)是一种特殊的语法,用于在模板中对DOM元素进行操作和绑定数据。指令以`v-`开头,后面跟着指令的名称,例如`v-bind`、`v-model`等。指令可以直接应用在HTML标签上,通过指令可以改变DOM元素的属性、样式、事件等。

指令的作用包括但不限于以下几个方面:

1. 数据绑定:指令可以将Vue实例中的数据与DOM元素进行绑定,实现数据的动态更新。例如,`v-bind`指令可以将Vue实例中的数据绑定到DOM元素的属性上,实现属性的动态更新。

2. 条件渲染:指令可以根据条件来决定是否渲染DOM元素。例如,`v-if`指令可以根据条件来判断是否渲染DOM元素。

3. 列表渲染:指令可以根据数据的列表来渲染DOM元素。例如,`v-for`指令可以根据数据的列表来渲染多个DOM元素。

4. 事件绑定:指令可以将Vue实例中的方法绑定到DOM元素的事件上,实现事件的处理。例如,`v-on`指令可以将Vue实例中的方法绑定到DOM元素的点击事件上。

5. 样式绑定:指令可以根据条件来动态修改DOM元素的样式。例如,`v-bind:class`指令可以根据条件来动态添加或移除DOM元素的类名。

6. 表单输入绑定:指令可以将表单元素与Vue实例中的数据进行双向绑定。例如,`v-model`指令可以将表单元素的值与Vue实例中的数据进行双向绑定。

通过指令,开发者可以方便地操作DOM元素和绑定数据,实现动态的页面效果和交互。指令是Vue中非常重要的一部分,是实现数据驱动视图的关键。同时,Vue也提供了一些内置的指令,开发者也可以自定义指令来满足特定的需求。

2.2  案例

流程

Vue的指令流程主要包括以下几个步骤:

  • 1. 解析模板:在Vue应用中,首先需要解析HTML模板。Vue会遍历模板中的所有元素和属性,查找其中的指令。指令以`v-`开头,例如`v-bind`、`v-if`等。
  • 2. 创建Vue实例:在解析模板的过程中,Vue会创建一个Vue实例,该实例将负责管理数据和处理视图。Vue实例会与模板中的元素和指令建立关联。
  • 3. 建立数据绑定关系:当Vue实例创建完成后,会根据指令建立数据与视图的双向绑定关系。Vue会遍历模板中的指令,将指令与Vue实例中的数据属性进行绑定。例如,`v-bind`指令可以将Vue实例中的数据绑定到DOM元素的属性上。
  • 4. 数据更新:一旦数据发生变化,Vue会使用响应式系统检测数据的变化,并触发相应的更新操作。Vue会自动更新与之相关的插值表达式和指令,保持数据和视图的同步。
  • 5. 更新视图:当数据更新时,Vue会重新渲染虚拟DOM树,并比较新旧虚拟DOM树的差异。然后,Vue会将差异应用到实际的DOM树上,更新视图。这个过程是高效的,只会更新实际发生变化的部分,而不会重新渲染整个DOM树。
  • 6. 渲染HTML:最后,Vue会将更新后的DOM树渲染到浏览器中,展示给用户。用户可以看到数据的变化和视图的更新。

通过这个流程,Vue实现了数据与视图的同步更新,使得页面能够动态地显示数据的变化。指令在其中起到了关键的作用,通过指令可以将数据绑定到DOM元素上,实现数据的动态更新、条件渲染、列表渲染、事件绑定等功能。

演示

创建一个HTML文件,编写以下代码 :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    <title>指令</title>
  </head>
  <body>
    <!-- 定义边界 -->
        <div id="app">
              <h1>v-if|v-else|v-else-if:</h1>
              分数:<input v-model="score" />
              <div v-if="score>80">打蓝球</div>
              <div v-else-if="score>60">踢足球</div>
              <div v-else="score<60">练习两年半</div>
              <h1>v-show:</h1>
              <div v-show="score>90">v-show-蓝球练习两年半</div>
              <div v-if="score>90">v-if-蓝球练习两年半</div>
              <h1>v-for:</h1>
              <span v-for="a in arr" >{{a}}&nbsp;&nbsp;</span><br />
              <select v-model="selected">
                <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
              </select>
              <div v-for="h in hobby">
              <input :value="h.id" type=checkbox />{{h.name}}
              </div>
              <h1>动态参数</h1>
              <input v-model="evname"/>
              <button  v-on:[evname]="te">别点</button>
            </div>
          </body>
          <script type="text/javascript">
            // 构建vue实例并绑定边界
            new Vue({
              el: '#app',
              data() {
                return {
                  score:78,
                  arr:['a','b','c','d'],
                  hobby:[
                    {id:"1",name:"独孤"},
                    {id:"2",name:"葵花"},
                    {id:"3",name:"学典"}
                  ],
                  selected:3,
                  evname:"click"
                };
              },
              methods:{
                te(){
                  alert("凉凉")
                }
              }
            })
          </script>
        </html>

效果如图 :

三、过滤器

3.1  讲述

在Vue中,过滤器(Filters)是一种用于格式化文本或数据的功能。它们可以在双花括号插值和`v-bind`表达式中使用,以对输出进行一些简单的转换。

过滤器可以用于以下几个方面:

1. 文本格式化:过滤器可以将文本进行格式化,例如将文本转换为大写或小写,格式化日期等。

2. 数据处理:过滤器可以对数据进行处理,例如对数字进行四舍五入、保留小数位数等。

3. 条件渲染:过滤器可以根据条件来渲染文本或数据,例如根据条件显示不同的文本或数据。

4. 数据排序:过滤器可以对数据进行排序,例如对列表数据按照特定的条件进行排序。

Vue中内置了一些常用的过滤器,例如`uppercase`、`lowercase`、`currency`、`date`等。同时,Vue还支持自定义过滤器,开发者可以根据自己的需求定义自己的过滤器。

使用过滤器的语法是在插值表达式或`v-bind`表达式中使用管道符(`|`)将过滤器名称添加到表达式中,例如`{{ message | uppercase }}`。可以使用多个过滤器,它们会按照从左到右的顺序进行链式调用,例如`{{ message | uppercase | lowercase }}`。

过滤器提供了一种简单而灵活的方式来处理和格式化数据,使得页面输出更加清晰和易读。

3.2  实例

流程

使用过滤器的流程如下:

 --1. 注册过滤器:在Vue实例创建之前,可以使用全局方法`Vue.filter`来注册过滤器。也可以在组件的选项中使用`filters`属性来注册局部过滤器。

 --2. 使用过滤器:在模板中使用过滤器时,可以在插值表达式或`v-bind`表达式中使用管道符(`|`)将过滤器名称添加到表达式中。可以使用多个过滤器,它们会按照从左到右的顺序进行链式调用。

 --3. 定义过滤器:过滤器可以是全局过滤器或局部过滤器。全局过滤器在注册时指定名称和处理函数,而局部过滤器可以在组件的选项中定义。

 --4. 运行过滤器:当模板中使用过滤器时,Vue会自动调用过滤器函数,并将表达式的值作为参数传递给过滤器函数。过滤器函数可以对参数进行处理,并返回处理后的结果。

 --5. 渲染结果:Vue会将过滤器函数返回的结果插入到模板中,并最终渲染到页面上。

需要注意的是,过滤器是一种纯函数,它不会修改原始数据,而是返回一个新的值。因此,在使用过滤器时,应该将过滤器的结果赋值给一个变量,而不是直接修改原始数据。

另外,过滤器可以接收额外的参数,可以在使用过滤器时通过冒号(`:`)指定参数。例如,`{{ message | uppercase('param') }}`,其中`'param'`是传递给过滤器的额外参数。

总的来说,使用过滤器的流程包括注册过滤器、使用过滤器、定义过滤器、运行过滤器和渲染结果。通过使用过滤器,可以对文本或数据进行格式化和处理,使得页面输出更加清晰和易读。

演示

创建HTML文件,编写以下代码 :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    <script src="js/date.js"></script>
    <title>过滤器</title>
  </head>
  <body>
       <!-- 定义边界 -->
        <div id="app">
          <h3>局部过滤器</h3>
          没过滤:{{mag}}<br />
          已过滤:{{mag | filter1}}
          <h3>局部过滤器串行</h3>
          没过滤: {{mag}}<br />
          已过滤: {{mag | filter1 }}<br />
          串行过滤: {{mag | filter1 | filter2(3,5)}}
          <h3>全局过滤器</h3>
          {{time}}<br />
          {{time | filterDate}}
        </div>
        <script type="text/javascript">
          Vue.filter('filterDate',function(value){
            return fmtDate(value);
          });
          // 构建vue实例并绑定边界
          new Vue({
            el: '#app',
            data() {
              return {
                mag:'我爱洗澡,皮肤好好,我爱学习,天天向上',
                time: new Date()
              };
            },filters:{
                'filter1':function(val){
               return val.substring(2,9);
                 },
                 'filter2':function(val,start,end){
                 return val.substring(start,end);
                }
                }
          })
        </script>
  </body>
</html>

效果如图 :

四、计算属性&监听属性

( 1 )  计算属性

1-1  介绍

在Vue中,计算属性(Computed Properties)是一种用于声明响应式依赖关系的属性。计算属性会根据它们的依赖进行缓存,并且只在相关依赖发生改变时才会重新计算。

计算属性的作用主要有以下几个方面:

1. 数据处理:计算属性可以对原始数据进行处理,返回一个新的计算结果。例如,可以将字符串转换为大写或小写,对数字进行四舍五入等。

2. 数据过滤:计算属性可以根据条件对数据进行过滤,只返回符合条件的数据。例如,可以根据条件筛选出某个列表中的特定项。

3. 数据关联:计算属性可以根据多个数据的关联关系进行计算,并返回一个新的计算结果。例如,可以根据用户的输入计算出一个表单字段的合法性或相关性。

4. 数据缓存:计算属性会根据它们的依赖进行缓存,只在相关依赖发生改变时才会重新计算。这样可以避免不必要的计算,提高性能。

计算属性的使用方式是在Vue实例的`computed`选项中声明计算属性的名称和对应的计算函数。计算函数会在计算属性被访问时自动调用,并返回计算结果。计算属性可以像普通属性一样在模板中使用,而不需要调用函数。

需要注意的是,计算属性是基于它们的依赖进行缓存的。只有当依赖发生改变时,计算属性才会重新计算。如果计算属性的依赖不会发生改变,那么每次访问计算属性时都会返回缓存的结果,而不会重新计算。这样可以提高性能,避免不必要的计算。

总的来说,计算属性是一种方便而强大的特性,可以帮助我们处理和计算数据,使得代码更加简洁和易读。

1-2  演示

创建HTML文件,编写以下代码 :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>计算属性&监听属性</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
  </head>
  <body>
    <!-- 定义边界 -->
    <div id="app">
      <!-- 只是单方面的监听计算 -->
      <h3>计算属性</h3>
      单价:<input v-model="dj"/>
      数量:<input v-model="sl"/>
      总计:{{count}}
      <h3>监听器</h3>
      <!-- 这里是双方面的监听计算 -->
      千米:<input v-model="km" />
      米:<input v-model="m" />
    </div>
    <script type="text/javascript">
      // 构建vue实例并绑定边界
      new Vue({
        el: '#app',
        //定义属性
        data() {
          return {
            sl:80,
            dj: 1,
            km:1,
            m:1000
          };
        },
        computed:{
          count:function(){
            return this.dj * this.sl;
          }
        },
        watch:{
          //v为被监听属性,这里值m
          km:function(v){
           this.m = parseInt(v)*1000; 
          },//v为被监听属性,这里值km
          m:function(v){
           this.km = parseInt(v)/1000;
          }
        }
      })
      </script> 
  </body>
</html>

效果如图 :

( 2 )  监听属性

2-1  讲述

在Vue中,可以使用`watch`选项来监听数据的变化。监听属性是一种用于在数据变化时执行特定操作的功能。

通过`watch`选项,可以指定要监听的数据和对应的回调函数。当被监听的数据发生变化时,Vue会自动调用回调函数,并将新值和旧值作为参数传递给回调函数。

监听属性的使用方式是在Vue实例的`watch`选项中声明要监听的属性和对应的回调函数。回调函数会在被监听的属性发生变化时自动调用,并传入新值和旧值。

监听属性的作用主要有以下几个方面:

1. 响应式数据的监控:通过监听属性,可以实时监控数据的变化,从而做出相应的操作。例如,可以在数据变化时更新页面的显示内容。

2. 异步操作的触发:监听属性可以用于在数据变化时触发异步操作,例如发送网络请求、更新其他数据等。通过监听属性,可以在数据变化后立即执行相应的操作。

3. 数据验证和处理:监听属性可以用于对数据进行验证和处理。例如,可以监听输入框的值,当输入框的值发生变化时,可以对输入的内容进行验证,判断是否符合要求。

4. 数据的联动更新:监听属性可以用于实现数据的联动更新。例如,可以监听一个对象的属性,当属性的值发生变化时,可以更新其他相关的属性或数据。

总的来说,监听属性是一种用于在数据变化时执行特定操作的功能。通过使用监听属性,可以对数据的变化进行实时监控,并在数据发生变化时执行相应的操作,从而实现更加灵活和精确的响应式行为。

2-2  演示

效果如图 :

( 3 )  购物车案例

首先创建一个购物车的html文件,代码如下 :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>购物车-计算属性&监听属性</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    <link href="css/myCart.css" type="text/css" rel="stylesheet" />
  </head>
  <body>
    <!--定义边界 -->
    <div id="app">
        <div id="content">
         <table width="100%" border="0" cellspacing="0" cellpadding="0" id="shopping">
         <form action="" method="post" name="myform">
          <tr>
            <td class="title_1"><input id="allCheckBox" type="checkbox" value="" onclick="myAll()" />全选</td>
            <td class="title_2" colspan="2">店铺宝贝</td>
            <td class="title_3">获积分</td>
            <td class="title_4">单价(元)</td>
            <td class="title_5">数量</td>
            <td class="title_6">小计(元)</td>
            <td class="title_7">操作</td>
          </tr>
          <tr>
            <td colspan="8" class="line"></td>
          </tr>
          <tr>
            <td colspan="8" class="shopInfo">店铺:<a href="#">纤巧百媚时尚鞋坊</a>    卖家:<a href="#">纤巧百媚</a> <img src="img/taobao_relation.jpg" alt="relation" /></td>
          </tr>
           <tr id="product1  ">
            <td class="cart_td_1"><input name="cartCheckBox" type="checkbox" value="product1" onclick="selectSingle()" /></td>
            <td class="cart_td_2"><img src="img/taobao_cart_01.jpg" alt="shopping"/></td>
            <td class="cart_td_3"><a href="#">日韩流行风时尚美眉米字拼图金属坡跟公主靴子黑色</a><br />
                颜色:棕色 尺码:37<br />
                保障:<img src="img/taobao_icon_01.jpg" alt="icon" /></td>
            <td class="cart_td_4">5</td>
            <td class="cart_td_5">{{boots}}</td>
            <td class="cart_td_6">
            <button @click="bootsadd">+</button>
            <input id="xz" type="text" v-model="bootssl"  class="num_input" /> 
            <button @click="bootsminus">-</button>
            <td class="cart_td_7">{{bootsxj}}</td>
            <td class="cart_td_8"><a href="javascript:deleteRow('product1')">删除</a></td>
          </tr>
          <tr>
            <td colspan="8" class="shopInfo">店铺:<a href="#">香港我的美丽日记</a>    卖家:<a href="#">lokemick2009</a> <img src="img/taobao_relation.jpg" alt="relation" /></td>
          </tr>
           <tr id="product2">
            <td class="cart_td_1"><input name="cartCheckBox" type="checkbox" value="product2" onclick="selectSingle()" /></td>
            <td class="cart_td_2"><img src="img/taobao_cart_02.jpg" alt="shopping"/></td>
            <td class="cart_td_3"><a href="#">chanel/香奈尔/香奈尔炫亮魅力唇膏3.5g</a><br />
                保障:<img src="img/taobao_icon_01.jpg" alt="icon" /> <img src="img/taobao_icon_02.jpg" alt="icon" /></td>
            <td class="cart_td_4">12</td>
            <td class="cart_td_5">{{chanel}}</td>
            <td class="cart_td_6">
            <button @click="chaneladd">+</button>
            <input type="text" v-model="chanelsl"  class="num_input" />
            <button @click="chanelminus">-</button>
            </td>
            <td class="cart_td_7">{{chanelxj}}</td>
            <td class="cart_td_8"><a href="javascript:deleteRow('product2')">删除</a></td>
          </tr>
           <tr>
            <td colspan="8" class="shopInfo">店铺:<a href="#">实体经营</a>    卖家:<a href="#">林颜店铺</a> <img src="img/taobao_relation.jpg" alt="relation" /></td>
          </tr>
           <tr id="product3">
            <td class="cart_td_1"><input name="cartCheckBox" type="checkbox" value="product3"  onclick="selectSingle()"/></td>
            <td class="cart_td_2"><img src="img/taobao_cart_03.jpg" alt="shopping"/></td>
            <td class="cart_td_3"><a href="#">蝶妆海晳蓝清滢粉底液10#(象牙白)</a><br />
                保障:<img src="img/taobao_icon_01.jpg" alt="icon" /> <img src="img/taobao_icon_02.jpg" alt="icon" /></td>
            <td class="cart_td_4">3</td>
            <td class="cart_td_5">{{foundation}}</td>
            <td class="cart_td_6">
            <button @click="foundationadd">+</button>
            <input id="num_3" type="text" v-model="foundationsl"   class="num_input" />
            <button @click="foundationminus">-</button>
            </td>
            <td class="cart_td_7">{{foundationxj}}</td>
            <td class="cart_td_8"><a href="javascript:deleteRow('product3')">删除</a></td>
          </tr>
           <tr>
           <td  colspan="3"><a href="javascript:deleteSelectRow()"><img src="img/taobao_del.jpg" alt="delete"/></a></td>
            <td colspan="5" class="shopend">商品总价(不含运费):<label id="total" class="yellow">{{count}}</label> 元<br />
            可获积分 <label class="yellow" id="integral"></label> 点<br />
            <input name=" " type="image" src="img/taobao_subtn.jpg" /></td>
          </tr>
          </form>
        </table>
        </div>  
    </div>
    <script type="text/javascript">
    // 构建vue实例并绑定边界
    new Vue({
      el: '#app',
      //定义属性
      data() {
        return {
          boots:150,
          bootssl:1,
          chanel:230,
          chanelsl:1,
          foundation: 300,
          foundationsl:1
        };
      },
      methods:{
      //加的事件
        bootsadd(){
        this.bootssl=parseInt(this.bootssl)+1;
        },
      //减的事件
      bootsminus(){
      if(this.bootssl > 1){
        this.bootssl=parseInt(this.bootssl)-1;
        }
      },
      //加的事件
      chaneladd(){
        this.chanelsl=parseInt(this.chanelsl)+1;
      },
      //减的事件
      chanelminus(){
        if(this.chanelsl > 1){
          this.chanelsl=parseInt(this.chanelsl)-1;
        }
      },
      //加的事件
      foundationadd(){
        this.foundationsl=parseInt(this.foundationsl)+1;
      },
      //减的事件
      foundationminus(){
        if(this.foundationsl > 1){
        this.foundationsl=parseInt(this.foundationsl)-1;
        }
      }
      },
      computed:{
        bootsxj(){
          return this.boots * this.bootssl;
        },
        chanelxj(){
            return this.chanel * this.chanelsl;
        },
        foundationxj(){
            return this.foundation * this.foundationsl;
        },
        count:function(){
          return this.bootsxj + this.chanelxj + this.foundationxj;
        }
      }
    })
    </script>
  </body>
</html>

创建css样式资源,名为 : myCart.css

body{
  margin:0px;
  padding:0px;
  font-size:12px;
  line-height:20px;
  color:#333;
   }
ul,li,ol,h1,dl,dd{
  list-style:none;
  margin:0px;
  padding:0px;
  }
a{
  color:#1965b3;
    text-decoration: none;
  }    
a:hover{
  color:#CD590C;
  text-decoration:underline;
  }
img{
  border:0px;
  vertical-align:middle;
  }
#header{
  height:40px;
  margin:10px auto 10px auto;
  width:800px;
  clear:both;
  }
#nav{
  margin:10px auto 10px auto;
  width:800px;
  clear:both;
  }
#navlist{
  width:800px;
  margin:0px auto 0px auto;
  height:23px;
  }
  #navlist li{
    float:left;
    height:23px;
    line-height:26px;
  }
  .navlist_red_left{
    background-image:url(../img/taobao_bg.png);
    background-repeat:no-repeat;
    background-position:-12px -92px;
    width:3px;
    }
  .navlist_red{
    background-color:#ff6600;
    text-align:center;
    font-size:14px;
    font-weight:bold;
    color:#FFF;
    width:130px;
    }
  .navlist_red_arrow{
    background-color:#ff6600;
    background-image:url(../img/taobao_bg.png);
    background-repeat:no-repeat;
    background-position:0px 0px;
    width:13px;
    }
  .navlist_gray{
    background-color:#e4e4e4;
    text-align:center;
    font-size:14px;
    font-weight:bold;
    width:150px;
    }
  .navlist_gray_arrow{
    background-color:#e4e4e4;
    background-image:url(../img/taobao_bg.png);
    background-repeat:no-repeat;
    background-position:0px 0px;
    width:13px;
    }
  .navlist_gray_right{
    background-image:url(../img/taobao_bg.png);
    background-repeat:no-repeat;
    background-position:-12px -138px;
    width:3px;
    }
#content{
  width:800px;
  margin:10px auto 5px auto;
  clear:both;
  }
  .title_1{
    text-align:center;
    width:50px;
    }
  .title_2{
    text-align:center;
    }
  .title_3{
    text-align:center;
    width:80px;
    }
  .title_4{
    text-align:center;
    width:80px;
    }
  .title_5{
    text-align:center;
    width:100px;
    }
  .title_6{
    text-align:center;
    width:120px;
    }
  .title_7{
    text-align:center;
    width:60px;
    }
  .line{
    background-color:#a7cbff;
    height:3px;
    }
  .shopInfo{
    padding-left:10px;
    height:35px;
    vertical-align:bottom;
    }
  .num_input{
    border:solid 1px #666;
    width:25px;
    height:15px;
    text-align:center;
    }
  .cart_td_1,.cart_td_2,.cart_td_3,.cart_td_4,.cart_td_5,.cart_td_6,.cart_td_7,.cart_td_8{
    background-color:#e2f2ff;
    border-bottom:solid 1px #d1ecff;
    border-top:solid 1px #d1ecff;
    text-align:center;
    padding:5px;
    }
  .cart_td_1,.cart_td_3,.cart_td_4,.cart_td_5,.cart_td_6,.cart_td_7{
    border-right:solid 1px #FFF;
    }
  .cart_td_3{
    text-align:left;
    }
  .cart_td_4{
    font-weight:bold;
    }
  .cart_td_7{
    font-weight:bold;
    color:#fe6400;
    font-size:14px;
    }
  .hand{
    cursor:pointer;
    }
.shopend{
  text-align:right;
  padding-right:10px;
  padding-bottom:10px;
  }
.yellow{
  font-weight:bold;
  color:#fe6400;
  font-size:18px;
  line-height:40px;
  }

演示效果 :

带给我们的收获

学习Vue的插值、指令、过滤器、计算属性及监听属性可以带来以下收获:

  • 1. 理解Vue的模板语法:插值、指令、过滤器、计算属性及监听属性是Vue模板语法的重要组成部分。学习这些特性可以帮助我们更好地理解Vue的模板语法,从而更加熟练地使用Vue进行开发。
  • 2. 提高开发效率:Vue的插值、指令、过滤器、计算属性及监听属性能够帮助我们更加高效地开发应用。例如,计算属性可以减少重复的代码,监听属性可以实时监控数据的变化,从而提高开发效率。
  • 3. 优化应用性能:Vue的计算属性和监听属性可以帮助我们优化应用的性能。计算属性可以基于依赖进行缓存,避免不必要的计算,而监听属性可以实时监控数据的变化,从而避免不必要的重渲染。
  • 4. 实现复杂的数据处理和展示:Vue的计算属性和过滤器可以帮助我们实现复杂的数据处理和展示。例如,可以使用计算属性将多个数据进行组合,使用过滤器对数据进行格式化。

总的来说,学习Vue的插值、指令、过滤器、计算属性及监听属性可以帮助我们更加熟练地使用Vue进行开发,并提高应用的性能和开发效率。

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
6天前
|
JavaScript
如何在 Vue 中使用具名插槽
【10月更文挑战第25天】通过使用具名插槽,你可以更好地组织和定制组件的模板结构,使组件更具灵活性和可复用性。同时,具名插槽也有助于提高代码的可读性和可维护性。
13 2
|
6天前
|
JavaScript
Vue 中的插槽
【10月更文挑战第25天】插槽的使用可以大大提高组件的复用性和灵活性,使你能够根据具体需求在组件中插入不同的内容,同时保持组件的结构和样式的一致性。
11 2
|
6天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
JavaScript 前端开发
vue通过监听实现相同路径的视图重新加载
最近在做一个项目,前端菜单路径如下: { path: '/oa/workflow/process/:status', component: sys_workflow_process, ...
1258 0
|
7天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
10天前
|
JavaScript
Vue 指令速查表
【10月更文挑战第12天】Vue 指令速查表
|
7天前
|
缓存 JavaScript 搜索推荐
Vue SSR(服务端渲染)预渲染的工作原理
【10月更文挑战第23天】Vue SSR 预渲染通过一系列复杂的步骤和机制,实现了在服务器端生成静态 HTML 页面的目标。它为提升 Vue 应用的性能、SEO 效果以及用户体验提供了有力的支持。随着技术的不断发展,Vue SSR 预渲染技术也将不断完善和创新,以适应不断变化的互联网环境和用户需求。
27 9
|
6天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
6天前
|
JavaScript 前端开发 UED
vue 提高 tree shaking 的效果
【10月更文挑战第23天】提高 Vue 中 Tree shaking 的效果需要综合考虑多个因素,包括模块的导出和引用方式、打包工具配置、代码结构等。通过不断地优化和调整,可以最大限度地发挥 Tree shaking 的优势,为 Vue 项目带来更好的性能和用户体验。
|
11天前
|
JavaScript 前端开发 开发者
Vue 的优缺点
【10月更文挑战第16天】Vue 具有众多优点,使其成为前端开发中备受青睐的框架之一。尽管它也存在一些局限性,但通过合理的应用和技术选型,这些问题可以得到一定程度的解决。在实际项目中,开发者可以根据项目的需求和特点,权衡 Vue 的优缺点,选择最适合的技术方案。同时,随着 Vue 不断的发展和完善,相信它将在前端开发领域继续发挥重要作用。
19 6

相关实验场景

更多