Vue.js基本语法上

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: Vue.js基本语法上

                                   🎬 艳艳耶✌️:个人主页

                                  🔥 个人专栏 :《Spring与Mybatis集成整合》《springMvc使用》

                                   ⛺️ 生活的理想,为了不断更新自己 !

 




1.插值

1.1 文本

插值表达式用户把vue中所定义的数据,显示在页面上. 插值表达式允许用户输入"JS代码片段"

语法:{{ 变量名/对象.属性名 }}

<p>文本</p> {{msg}} <br/>
<script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          msg:'hello a',
          }
        }
      })
      </script>

结果:

1.2 v-v-html

v-html专门用来展示数据, 其作用和插值表达式类似但可以避免插值闪烁问题。

当网速比较慢时, 使用{{}}来展示数据, 有可能会产生插值闪烁问题。

插值闪烁: 在数据未加载完成时,页面会显示出原始的{{}}, 过一会才会展示正常数据.

语法

<p>html解析</p> {{msg2}}<br/>

区别

  • v-text/{{变量名/对象.属性名}}:把数据当作纯文本显示.
  • v-html:遇到html标签,会正常解析

1.3 数据双向绑定数据(v-model)

Vue的双向绑定可以实现: 数据变化的时候, 页面会自动刷新, 页面变化的时候,数据也会自动变化.

注意:

双向绑定, 只能绑定**“文本框,单选按钮,复选框,文本域,下拉列表”**等

文本框/单选按钮/textarea, 绑定的数据字符串类型

单个复选框, 绑定的是boolean类型
多个复选框, 绑定的是数组
select单选对应字符串,多选对应也是数组

1.4 属性(v-bind)

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

代码:

<!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 type="text/css">
      .f30{
        font-size: 50px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- <p>文本</p> {{msg}} <br/> -->
      <p>html解析</p> {{msg2}}<br/>
      <b :class="msg3" v-html="msg2"></b>
      <!-- <p>表达式</p> 
      {{num+1}}
      {{warn.substr(0,6)}}
      <input v-model="ok"/>
      {{ok==1? '闪开' :'不闪开'}} -->
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          // msg:'hello a',
          msg2:'<span style="color:pink">玛卡玛卡,我是个小聪明</span>',
          msg3:'f30',
          // num:6,
          // warn:'公主驾到通通闪开',
          // ok:1
          }
        }
      })
      </script>
  </body>
</html>

结果:

1.5 表达式

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

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

         {{ number + 1 }}

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

         <li v-bind:id="'list-' + id">我的Id是js动态生成的</li>

代码:

<p>表达式</p> 
      {{num+1}}
      {{warn.substr(0,6)}}
      <input v-model="ok"/>
      {{ok==1? '闪开' :'不闪开'}}
            num:6,
      warn:'公主驾到通通闪开',
      ok:1

结果:

1.6 class绑定

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

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

代码:

<!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 type="text/css">
      .f30{
        font-size: 50px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- <p>文本</p> {{msg}} <br/> -->
      <p>html解析</p> {{msg2}}<br/>
      <b :class="msg3" v-html="msg2"></b>
      <!-- <p>表达式</p> 
      {{num+1}}
      {{warn.substr(0,6)}}
      <input v-model="ok"/>
      {{ok==1? '闪开' :'不闪开'}} -->
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          // msg:'hello a',
          msg2:'<span style="color:pink">玛卡玛卡,我是个小聪明</span>',
          msg3:'f30',
          // num:6,
          // warn:'公主驾到通通闪开',
          // ok:1
          }
        }
      })
      </script>
  </body>
</html>

结果:

1.7 style绑定

 v-bind:style="expression"

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

代码:

<!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 type="text/css">
      .f30{
        font-size: 50px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- <p>文本</p> {{msg}} <br/> -->
      <p>html解析</p> {{msg2}}<br/>
      <b :class="msg3" v-html="msg2"></b>
      <!-- <p>表达式</p> 
      {{num+1}}
      {{warn.substr(0,6)}}
      <input v-model="ok"/>
      {{ok==1? '闪开' :'不闪开'}} -->
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          // msg:'hello a',
          msg2:'<span style="color:pink">玛卡玛卡,我是个小聪明</span>',
          msg3:'f30',
          // num:6,
          // warn:'公主驾到通通闪开',
          // ok:1
          }
        }
      })
      </script>
  </body>
</html>

结果:

1.8复选框

代码:

<!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">
      <!-- <p>v-if/v-else-if/v-else</p>
      <input v-model="score"/><br />
      <b v-if="score < 60 ">不及格</b>
      <b v-else-if="score >= 60 && score < 70">及格</b>
      <b v-else-if="score >= 70 && score < 80">一般</b>
      <b v-else-if="score >= 80 && score < 90">良好</b>
      <b v-else="">优秀</b> -->
      <!-- 60以下不及格
      60-70及格:
      70-80一般:
      80-90良好:
      90-100优秀:
       -->
      <!-- <p>v-show</p>
      v-if与v-show的区别?<br>
      <b v-if="isShow">展示</b>
      <b v-show="isShow">展示</b> 
       -->
    <!--  
      <p>v-for</p>
      <i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
      <i v-for="a,u in users">{{a.name}}&nbsp;&nbsp;</i> -->
      <!-- <p>下拉框</p> 
      <select>
        <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
      </select> --> 
       <p>多选框</p>
      <div id="" v-for="h in hobby">
      <input type="checkbox" name="hobby" :value="h.id"/>{{h.name}}
      </div>
      <!-- <p>动态参数</p>
      <input v-model="click"/>
      <button v-on:[evname]="test">点我</button> -->
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          score:88,
          isShow:false,
        // arr:[1,2,3,4],
        users:[{
          name:'游乐场',id:1
          },{
          name:'水上世界',id:2
          },{
          name:'k歌',id:3
          },{
          name:'动物园',id:4
          }],
          hobby:[{
          name:'吃汉堡',id:1
          },{
          name:'吃炸鸡',id:2
          },{
          name:'喝可乐',id:3
          },{
          name:'吃薯条',id:4
          }],
          evname:'click'
          }
        }
        ,methods:{
          test(){
            // 单击事件
            alert("公主驾到通通闪开")
          }
        }
      })
      </script>
  </body>
</html>

结果:

1.9下拉框

代码:

<!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">
      <!-- <p>v-if/v-else-if/v-else</p>
      <input v-model="score"/><br />
      <b v-if="score < 60 ">不及格</b>
      <b v-else-if="score >= 60 && score < 70">及格</b>
      <b v-else-if="score >= 70 && score < 80">一般</b>
      <b v-else-if="score >= 80 && score < 90">良好</b>
      <b v-else="">优秀</b> -->
      <!-- 60以下不及格
      60-70及格:
      70-80一般:
      80-90良好:
      90-100优秀:
       -->
      <!-- <p>v-show</p>
      v-if与v-show的区别?<br>
      <b v-if="isShow">展示</b>
      <b v-show="isShow">展示</b> 
       -->
    <!--  
      <p>v-for</p>
      <i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
      <i v-for="a,u in users">{{a.name}}&nbsp;&nbsp;</i> -->
      <p>下拉框</p> 
      <select>
        <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
      </select> 
      <!-- <p>多选框</p>
      <div id="" v-for="h in hobby">
      <input type="checkbox" name="hobby" :value="h.id"/>{{h.name}} -->
      </div>
      <!-- <p>动态参数</p>
      <input v-model="click"/>
      <button v-on:[evname]="test">点我</button> -->
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          score:88,
          isShow:false,
        // arr:[1,2,3,4],
        users:[{
          name:'游乐场',id:1
          },{
          name:'水上世界',id:2
          },{
          name:'k歌',id:3
          },{
          name:'动物园',id:4
          }],
          hobby:[{
          name:'吃汉堡',id:1
          },{
          name:'吃炸鸡',id:2
          },{
          name:'喝可乐',id:3
          },{
          name:'吃薯条',id:4
          }],
          evname:'click'
          }
        }
        ,methods:{
          test(){
            // 单击事件
            alert("公主驾到通通闪开")
          }
        }
      })
      </script>
  </body>
</html>

结果:

2.指令

2.1  v-if|v-else|v-else-if

根据其后表达式的bool值进行判断是否渲染该元素

他们只能是兄弟元素

v-else-if上一个兄弟元素必须是v-if

v-else上一个兄弟元素必须是v-if或者是v-else-if

代码:

<!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">
      <p>v-if/v-else-if/v-else</p>
      <input v-model="score"/><br />
      <b v-if="score < 60 ">不及格</b>
      <b v-else-if="score >= 60 && score < 70">及格</b>
      <b v-else-if="score >= 70 && score < 80">一般</b>
      <b v-else-if="score >= 80 && score < 90">良好</b>
      <b v-else="">优秀</b>
      <!-- 60以下不及格
      60-70及格:
      70-80一般:
      80-90良好:
      90-100优秀:
       -->
      <!-- <p>v-show</p>
      v-if与v-show的区别?<br>
      <b v-if="isShow">展示</b>
      <b v-show="isShow">展示</b>
      <p>v-for</p>
      <i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
      <i v-for="i,u in users">{{u.name}}&nbsp;&nbsp;;{{i}}</i> 
      <p>下拉框</p>
      <select>
        <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
      </select> -->
      <!-- <p>多选框</p>
      <div id="" v-for="h in hobby">
      <input type="checkbox" name="hobby" :value="h.id"/>{{h.name}}
      </div> -->
      <!-- <p>动态参数</p>
      <input v-model="click"/>
      <button v-on:[evname]="test">点我</button> -->
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          score:88,
          isShow:false,
        arr:[1,2,3,4],
        users:[{
          name:'huahua',id:1
          },{
          name:'xiaomei',id:2
          },{
          name:'yanyan',id:3
          },{
          name:'heihei',id:4
          }],
          hobby:[{
          name:'吃汉堡',id:1
          },{
          name:'吃炸鸡',id:2
          },{
          name:'喝可乐',id:3
          },{
          name:'吃薯条',id:4
          }],
          evname:'click'
          }
        }
        ,methods:{
          test(){
            // 单击事件
            alert("公主驾到通通闪开")
          }
        }
      })
      </script>
  </body>
</html>

结果:

2.2  v-show

v-show指令与v-if指令类似,用于根据表达式的值来控制元素的显示和隐藏。当v-show指令的表达式的值为false时,元素会被渲染为不可见状态,并且会添加CSS样式"display:none"。这意味着该元素在页面上不会占据空间,并且不会显示给用户。

然而,v-show指令与加载出页面是不同的。当使用v-if指令时,如果条件为false,对应的元素将从DOM中完全移除,并且不会加载到页面上。

代码:

<b v-if="isShow">展示</b>
<b v-show="isShow">展示</b>

2.3  v-for

类似JS的遍历

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

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

语法:

<!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">
      <!-- <p>v-if/v-else-if/v-else</p>
      <input v-model="score"/><br />
      <b v-if="score < 60 ">不及格</b>
      <b v-else-if="score >= 60 && score < 70">及格</b>
      <b v-else-if="score >= 70 && score < 80">一般</b>
      <b v-else-if="score >= 80 && score < 90">良好</b>
      <b v-else="">优秀</b> -->
      <!-- 60以下不及格
      60-70及格:
      70-80一般:
      80-90良好:
      90-100优秀:
       -->
      <!-- <p>v-show</p>
      v-if与v-show的区别?<br>
      <b v-if="isShow">展示</b>
      <b v-show="isShow">展示</b> 
       -->
      <p>v-for</p>
      <i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
      <i v-for="a,u in users">{{a.name}}&nbsp;&nbsp;</i>
      <!-- <p>下拉框</p>
      <select>
        <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
      </select> 
       <p>多选框</p>
      <div id="" v-for="h in hobby">
      <input type="checkbox" name="hobby" :value="h.id"/>{{h.name}}
      </div> -->
      <!-- <p>动态参数</p>
      <input v-model="click"/>
      <button v-on:[evname]="test">点我</button> -->
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          score:88,
          isShow:false,
        arr:[1,2,3,4],
        users:[{
          name:'游乐场',id:1
          },{
          name:'水上世界',id:2
          },{
          name:'k歌',id:3
          },{
          name:'动物园',id:4
          }],
          hobby:[{
          name:'吃汉堡',id:1
          },{
          name:'吃炸鸡',id:2
          },{
          name:'喝可乐',id:3
          },{
          name:'吃薯条',id:4
          }],
          evname:'click'
          }
        }
        ,methods:{
          test(){
            // 单击事件
            alert("公主驾到通通闪开")
          }
        }
      })
      </script>
  </body>
</html>

结果:

2.4  动态参数

从2.6.0开始,可以用方括号括起来的JavaScript表达式作为一个指令的参数

 <a v-bind:[attrname]="url"> ... </a>

 同样地,你可以使用动态参数为一个动态的事件名绑定处理函数

 <a v-on:[evname]="doSomething"> ... </a>

代码:

<!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">
      <!-- <p>v-if/v-else-if/v-else</p>
      <input v-model="score"/><br />
      <b v-if="score < 60 ">不及格</b>
      <b v-else-if="score >= 60 && score < 70">及格</b>
      <b v-else-if="score >= 70 && score < 80">一般</b>
      <b v-else-if="score >= 80 && score < 90">良好</b>
      <b v-else="">优秀</b> -->
      <!-- 60以下不及格
      60-70及格:
      70-80一般:
      80-90良好:
      90-100优秀:
       -->
      <!-- <p>v-show</p>
      v-if与v-show的区别?<br>
      <b v-if="isShow">展示</b>
      <b v-show="isShow">展示</b> 
       -->
    <!--  
      <p>v-for</p>
      <i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
      <i v-for="a,u in users">{{a.name}}&nbsp;&nbsp;</i> -->
      <!-- <p>下拉框</p> 
      <select>
        <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
      </select> 
       <p>多选框</p>
      <div id="" v-for="h in hobby">
      <input type="checkbox" name="hobby" :value="h.id"/>{{h.name}}
      </div> -->
      <p>动态参数</p>
      <input v-model="click"/>
      <button v-on:[evname]="test">点我</button>
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          score:88,
          isShow:false,
        // arr:[1,2,3,4],
        users:[{
          name:'游乐场',id:1
          },{
          name:'水上世界',id:2
          },{
          name:'k歌',id:3
          },{
          name:'动物园',id:4
          }],
          hobby:[{
          name:'吃汉堡',id:1
          },{
          name:'吃炸鸡',id:2
          },{
          name:'喝可乐',id:3
          },{
          name:'吃薯条',id:4
          }],
          evname:'click'
          }
        }
        ,methods:{
          test(){
            // 单击事件
            alert("公主驾到通通闪开")
          }
        }
      })
      </script>
  </body>
</html>

结果:

3.过滤器

3.1.局部过滤器

代码:

<!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="date.js" type="text/javascript" charset="utf-8"></script>
    <title>过滤器</title>
  </head>
  <body>
    <div id="app">
      <p>局部过滤器基本应用</p>
      {{msg}}<br />
      {{msg | filterA}}
      <!-- <p>局部过滤器串行使用</p>
      {{msg}}<br />
      {{msg | filterA| filterB}}
      <p>局部过滤器传参</p>
      {{msg | filterC(1,4)}}<br /> -->
      <p>全局过滤器</p>
      {{time}}<br />
      {{time | fmtDateFilter}}
    </div>
    <script type="text/javascript">
      Vue.filter('fmtDateFilter',function(value) {
        // value表示过滤的内容
        return fmtDate(value);
      });
      new Vue({
        el:'#app',
        filters:{
          'filterA':function(v){
            return v.substring(0,6);
          },
          'filterB':function(v){
            return v.substring(2,4);
          },
          'filterC':function(v,begin,end){
            return v.substring(begin,end);
          }
        },
        data(){
          return{
          msg:'公主驾到通通闪开',
          time:new Date()
          };
          }
        ,methods:{
          test(){
            // 单击事件
            alert("公主驾到通通闪开")
          }
        }
      })
      </script>
  </body>
</html>

结果:

注意:

  • 过滤器函数接受表达式的值作为第一个参数
  • 过滤器可以串联    
    {{ message | filterA | filterB }}
  • 过滤器是JavaScript函数,因此可以接受参数:
    {{ message | filterA(arg1, arg2) }}
  • js定义一个类
    function Stu(){};
    Stu.prototype.add(a,b){};//添加一个新的实例方法
    Stu.update(a,b){};//添加一个新的类方法

3.2.全局过滤器

代码:

date.js

//给Date类添加了一个新的实例方法format
Date.prototype.format = function (fmt) {
  //debugger;
    var o = {
        "M+": this.getMonth() + 1,                 //月份
        "d+": this.getDate(),                    //日
        "h+": this.getHours(),                   //小时
        "m+": this.getMinutes(),                 //分
        "s+": this.getSeconds(),                 //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds()             //毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
};
function fmtDate(date, pattern) {
  var ts = date.getTime();
    var d = new Date(ts).format("yyyy-MM-dd hh:mm:ss");
    if (pattern) {
        d = new Date(ts).format(pattern);
    }
    return d.toLocaleString();
};

结果:

4.计算属性&监听属性

4.1.计算属性

计算属性就是一个提前定义好的方法, 该方法可以看作是一个特殊的值, 可以在插值表达式中使用

代码:

{<!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">
      <p>计算属性</p> 
      单价:<input v-model="price"/>
      数量:<input v-model="num"/>
      小计:{{count}}
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          price:88,
          num:1
          };
        },
        computed:{
          count:function(){
            return this.price * this.num;
          }
        }
      })
      </script>
  </body>
</html>

结果:

4.2.监听属性

watch可以监听简单属性值及其对象中属性值的变化

watch类似于onchange事件,可以在属性值修改的时候,执行某些操作

代码:

<!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">
      <!-- <p>计算属性</p> 
      单价:<input v-model="price"/>
      数量:<input v-model="num"/>
      小计:{{count}} -->
      <p>监听属性</p> 
      千米:<input v-model="km "/><br />
      米:<input v-model="m "/>
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data(){
          return{
          price:88,
          num:1,
          m:1000,
          km:1
          };
        },
        computed:{
          count:function(){
            return this.price * this.num;
          }
        },
        watch:{
          km:function(v){
            // V指的是被监听的属性,是km
            this.m =parseInt(v) *1000;
          },
          m:function(v){
            // V指的是被监听的属性,是m 
            this.km =parseInt(v) /1000;
          }
        }
      })
      </script>
  </body>
</html>

结果:

5.购物车案列(简单版本)

代码:

<!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 style="text-align: center;">购物车</h1>
      <table border="1" style="width: 100%; height: 80px;text-align: center;" >
        <thead>
        <tr>
          <th>商品</th>
          <th>单价</th>
          <th>数量</th>
          <th>小计</th>
        </tr> 
        </thead>
        <tbody>
          <tr>
            <td>炸鸡</td>
            <td>{{priceA}}</td>
            <td>
              <button @click="gooddelA">-</button>
              {{numA}}
              <button @click="goodaddA">+</button>
            </td>
            <td>{{countA}}</td>
          </tr>
          <tr>
            <td>炸薯条</td>
            <td>{{priceB}}</td>
            <td>
              <button @click="gooddelB">-</button>
              {{numB}}
              <button @click="goodaddB">+</button>
            </td>
            <td>{{countB}}</td>
          </tr>
          <tr>
            <td>汉堡</td>
            <td>{{priceC}}</td>
            <td>
              <button @click="gooddelC">-</button>
              {{numC}}
              <button @click="goodaddC">+</button>
            </td>
            <td>{{countC}}</td>
          </tr>
        </tbody>
        <tfoot>
          <tr>
            <td colspan="3">总价:</td>
            <td>{{total}}</td>
          </tr>
        </tfoot>
      </table>
    </div>
    <script>
        new Vue({
          el: '#app',
          data: {
          priceA:30,
          priceB:10,
          priceC:20,
          numA:1,
          numB:1,
          numC:1
          },
          computed: {
           countA:function(){
           return this.priceA * this.numA;
         },
         countB:function(){
               return this.priceB * this.numB;
         },
         countC:function(){
               return this.priceC * this.numC;
         },
         total:function(){
           return this.countA + this.countB +this.countC;
         }
          },
          methods: {
            goodaddA: function() {
              return this.numA++;
            },
        goodaddB: function() {
          return this.numB++;
        },
        goodaddC: function() {
          return this.numC++;
        },
        gooddelA: function() {
          if(this.numA>1){
             return this.numA--;
          }
        },
        gooddelB: function() {
         if(this.numB>1){
           return this.numB--;
         }
        },
        gooddelC: function() {
        if(this.numC>1){
           return this.numC--;
        }
        },
          }
        });
      </script>
  </body>
</html>

结果:

今日分享就结束!!!

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
2月前
|
JavaScript
vue学习(3)模板语法
vue学习(3)模板语法
62 11
|
3月前
|
存储 JavaScript 前端开发
Node.js的基本语法
【8月更文挑战第12天】Node.js的基本语法
121 1
|
2月前
|
JavaScript
Vue3中路由跳转的语法
Vue3中路由跳转的语法
128 58
|
23天前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
28天前
|
JavaScript 前端开发 大数据
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
15 0
|
3月前
|
JavaScript 前端开发
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
这篇文章是JavaScript基础与实战教程的第一部分,涵盖了JavaScript的基本语法、标识符、数据类型以及如何进行强制类型转换,通过代码示例介绍了JS的输出语句、编写位置和数据类型转换方法。
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
|
3月前
|
JavaScript 开发工具 容器
初始Vue、Vue模板语法、数据绑定(2022/7/3)
这篇文章是关于Vue.js基础的介绍,包括Vue的简介、安装使用、开发工具、基础知识、模板语法和数据绑定。文中通过代码实例和页面效果展示了如何创建Vue实例、使用插值和指令语法、以及单向和双向数据绑定的方法。
初始Vue、Vue模板语法、数据绑定(2022/7/3)
|
3月前
|
前端开发 JavaScript 程序员
前端 JavaScript 的 _ 语法是个什么鬼?
前端 JavaScript 的 _ 语法是个什么鬼?
|
4月前
|
缓存 JavaScript 前端开发
前端框架与库 - Vue.js基础:模板语法、数据绑定
【7月更文挑战第14天】Vue.js 是渐进式框架,以简洁API和高效数据绑定知名。本文聚焦模板语法与数据绑定,解释常见问题和易错点,助力初学者避坑。模板语法中,{{ expression }} 用于渲染值,v-bind/: 用于动态绑定属性。数据绑定涉及文本、属性和事件,注意v-model适用于表单元素,计算属性有缓存。理解正确用法,借助文档和IDE,可提升开发质量和效率。善用Vue.js,打造响应式UI。
133 4
|
5月前
|
存储 JavaScript 前端开发
JavaScript 语法
JavaScript 语法
35 5