JavaWEB十九:Vue

Vue

一、简介
  1. 框架

    任何编程语言在最初的时候都是没有框架的,后来随着在实际开发过程中不断总结**『经验』,积累『最佳实践』,慢慢的人们发现很多『特定场景』下的『特定问题』总是可以『套用固定解决方案』**。

    于是有人把成熟的**『固定解决方案』收集起来,整合在一起,就成了『框架』**。

    在使用框架的过程中,我们往往只需要告诉框架**『做什么(声明)』,而不需要关心框架『怎么做(编程)』**。

    对于Java程序来说,我们使用框架就是导入那些封装了**『固定解决方案』的jar包,然后通过『配置文件』**告诉框架做什么,就能够大大简化编码,提高开发效率。我们使用过的junit其实就是一款单元测试框架。

    而对于JavaScript程序来说,我们使用框架就是导入那些封装了**『固定解决方案』『js文件』**,然后在框架的基础上编码。

    实际开发中使用框架时,我们也主要是告诉框架要做什么,具体操作是框架完成的。

  2. 开发中的最佳实践

    『最佳实践』是实际开发中,针对特定问题提炼出来的最好的解决方案。把『最佳实践』抽取出来,封装到各自编程语言的程序包中,就是框架的基础。

    Java语言的程序包:jar包

    JavaScript语言的程序包:外部js文件

    对于Java程序来说,框架=jar包+配置文件。对于Vue来说,导入Vue的外部js文件就能够使用Vue框架了。

  3. 声明式

    『声明式』是相对于『编程式』而言的。

    声明式:告诉框架做什么,具体操作由框架完成

    编程式:自己编写代码完成具体操作

  4. 在IDEA中加入vue.js文件

    官网提供的下载地址:https://cdn.jsdelivr.net/npm/vue/dist/vue.js

    在这里插入图片描述

二、vue基本语法
  1. 绑定属性 v-bind
    <!DOCTYPE html>
    <html lang="en" >
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
      <script language="JavaScript" src="script/vue.js"></script>
        
      <!-- vue -->
      <script language="JavaScript">
          window.onload=function (){
              var vue = new Vue({
                  <!-- el 是元素Element的缩写,用于和div进行绑定 -->
                  el:"#div0",
                  <!-- 渲染html中#div0样式内的对应参数 -->
                  data:{
                      msg:"hello!!!",
                      uname:"张三丰"
                  }
                  });
          }
      </script>
    </head>
    <body>
      
      <!-- html -->
      <!-- id中的值对应的是vue中的el元素的值 -->
      <div id="div0">   
        <!-- 在标签体内通过{{}}告诉Vue这里需要渲染; -->	
        <span>{{msg}}</span><br/>
        <!-- 在HTML标签的属性中,通过v-bind:属性名="表达式"的方式告诉Vue这里要渲染 -->
    	<input type="text" v-bind:value="uname"/>
      </div>
    </body>
    </html>
    

    在这里插入图片描述

  2. 双向数据绑定 v-model

    页面上数据被修改后,Vue对象中的数据属性也跟着被修改

    <!-- vue -->
      <script language="JavaScript">
          window.onload=function (){
              var vue = new Vue({
                  <!-- el 是元素Element的缩写,用于和div进行绑定 -->
                  el:"#div0",
                  <!-- 渲染html中#div0样式内的对应参数 -->
                  data:{
                      msg:"hello!!!",
                      uname:"张三丰"
                  }
                  });
          }
      </script>
    <!-- html -->
      <div id="div0">
        <span>{{msg}}</span><br/>
        <input type="text" v-model:value="msg"/>
    </div>
    

    加上**.trim**,可去除前后空格

    <input type="text" v-model.trim:value="msg"/>
    

    在这里插入图片描述

  3. 列表渲染,迭代 v-for
    <!-- vue -->
      <script language="JavaScript">
          window.onload=function (){
              var vue = new Vue({
                  <!-- el 是元素Element的缩写,用于和div进行绑定 -->
                  el:"#div0",              
                  data:{
                      fruitList:[
                          {fname:"苹果",price:5,fcount:200,remark:"苹果很好吃"},
                          {fname:"西瓜",price:6,fcount:300,remark:"西瓜很好吃"},
                          {fname:"桃子",price:3,fcount:100,remark:"桃子很好吃"},
                          {fname:"芒果",price:2,fcount:900,remark:"芒果很好吃"}
                      ]
                  }
              });
          }
      </script>
    
    <!-- html -->
      <div id="div0">    
          <table>
              <tr>
                  <th>名称</th>
                  <th>单价</th>
                  <th>数量</th>
                  <th>描述</th>
              </tr>
              <tr v-for="fruit in fruitList">
                  <td>{{fruit.fname}}</td>
                  <td>{{fruit.price}}</td>
                  <td>{{fruit.fcount}}</td>
                  <td>{{fruit.remark}}</td>
              </tr>
          </table>
      </div>
    

    在这里插入图片描述

  4. 条件渲染 v-if / v-else / v-show

    根据Vue对象中,数据属性的值来判断是否对HTML页面内容进行渲染。

    <!-- vue -->
      <script language="JavaScript">
          window.onload=function (){
              var vue = new Vue({
                  <!-- el 是元素Element的缩写,用于和div进行绑定 -->
                  el:"#div0",
                  data:{
                      num:2
                  }
              });
          }
      </script>
    <!-- html -->
      <div id="div0">
    	<!-- v-if/v-else 条件渲染 -->
          <input type="text" v-model="num" />
          <div v-if="num%2==0" style="width:200px;height: 200px;background-color:bisque;">&nbsp;</div>
          <div v-else="num%2==0" style="width:200px;height: 200px;background-color: blueviolet;">&nbsp;</div>
          <!-- v-show 通过display属性来控制这个div 是否在该页面显示 -->
          <input type="text" v-model="num" />
            <div v-show="num%2==0" style="width:200px;height: 200px;background-color: blueviolet;">&nbsp;</div>
      </div>
    

    在这里插入图片描述

  5. 事件驱动 v-on
    <!-- vue -->
      <script language="JavaScript">
          window.onload=function (){
              var vue = new Vue({
                  <!-- el 是元素Element的缩写,用于和div进行绑定 -->
                  el:"#div0",
                  data: {
                      msg:"hello world"
                  },
                  methods: {
                      myReverse: function () {
                          this.msg = this.msg.split("").reverse().join("");
                      }
                  }
              });
          }
      </script>
    <!-- html -->
      <div id="div0">
          <span>{{msg}}</span><br/>
          <input type="button" value="反转" v-on:click="myReverse" />
      </div>
    

    在这里插入图片描述

  6. 侦听渲染 watch
    <!-- vue -->
      <script language="JavaScript">
          window.onload=function (){
              var vue = new Vue({
                  <!-- el 是元素Element的缩写,用于和div进行绑定 -->
                  el:"#div0",              
                  data: {
                      num1:1,
                      num2:2,
                      num3:0
                  },
                  watch: {
                         // 侦听属性num1和num2
                         // 当num1的值有改动时,需要调用后面定义的方法,newValue指的是num1的新值
                      num1:function (newValue) {
                          this.num3 = parseInt(newValue) + parseInt(this.num2);
                      },
                      num2:function (newValue) {
                          this.num3 = parseInt(newValue) + parseInt(this.num1);
                      }
                  }
              });
          }
      </script>
     <!-- html -->
      <div id="div0">
          <input type="text" v-model="num1" size="2" />
          +
          <input type="text" v-model="num2" size="2" />
          =
          <span>{{num3}}</span>
      </div>
    

    在这里插入图片描述

  7. 生命周期
      <!-- vue -->
      <script language="JavaScript">
          window.onload=function (){
              var vue = new Vue({
                  <!-- el 是元素Element的缩写,用于和div进行绑定 -->
                  el:"#div0", 
                  data:{
                      msg:1
                  },
                  methods:{
                      changeMsg:function (){
                          this.msg = this.msg + 1;
                      }
                  },
                  // vue对象创建之前
                  beforeCreate:function (){
                      console.log("beforeCreate:vue 对象创建之前---------------------");
                      console.log("msg:"+this.msg);
                  },
                  created:function () {
                      console.log("beforeCreate:vue 对象创建之后---------------------");
                      console.log("msg:"+this.msg);
                  },
                  /*数据装载之前*/
                  beforeMount:function(){
                      console.log("beforeMount:数据装载之前---------------");
                      console.log("span:"+document.getElementById("span").innerText);
                  },
                  /*数据装载之后*/
                  mounted:function(){
                      console.log("mounted:数据装载之后---------------");
                      console.log("span:"+document.getElementById("span").innerText);
                  },
                  beforeUpdate:function () {
                      console.log("mounted:数据更新之前---------------");
                      console.log("msg:"+this.msg);
                      console.log("span:"+document.getElementById("span").innerText);
                  },
                  updated:function () {
                      console.log("mounted:数据更新之后---------------");
                      console.log("msg:"+this.msg);
                      console.log("span:"+document.getElementById("span").innerText);
                  }
              });
          }
      </script>
    
      <!-- html -->
      <div id="div0">
          <span id="span">{{msg}}</span>
          <input type="button" value="改变msg的值" @click="changeMsg"/>
      </div>
    </body>
    </html>
    

    在这里插入图片描述

参考资料:
  1. 第四章 Vue.js | 代码重工 (gitee.io)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e_nanxu

感恩每一份鼓励-相逢何必曾相识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值