java开发必备的Vue知识点和技能

news2024/11/27 2:23:44

vue介绍


    什么是Vue?vue就是一款用于构建用户界面的渐进式的JavaScript框架。(官方:https://cn.vuejs.org/)

  •     框架:就是一套完整的项目解决方案,用于快速构建项目。
  •     优点:大大提升前端项目的开发效率
  •     缺点:需要理解记忆框架的使用规则。

vue知识点


    快速入门:


        1,引入Vue模板(在官网上面复制)


             import { createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
      

2,创建Vue程序的应用实例,控制试图的元素


                  createApp({                                                        
                                                                              
          })


        3,准备元素(div),被vue控制


              <div id="app">
   
                  </div>


        4,准备数据


            data() {
                  return {
                            msg:'hello Vue'
                       }
                }


       5, 通过插值表达式渲染页面

          
                <h1>{{msg}}</h1>

完整版代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue-快速入门</title>
</head>
<body>
  <div id="app">
      <h1>{{msg}}</h1>
  </div>
  
  <script type="module">
    import { createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

    createApp({
        data() {
          return {
            msg:'hello Vue'
          }
        },
    }).mount('#app')
  </script>
</body>
</html>

    常用指令:

        v-for

列表渲染,遍历容器的元素或者对象的属性

作用:列表渲染,遍历容器的元素或者对象
语法:v-for = "(item,index) in items"

  •      items:要遍历的数组
  •      item:要遍历出来的元素
  •      index:  为索引/下标,从0开始 ;可以省略,省略index语法: v-for = "item in  items"

  v-for中的key  
   给元素添加的唯一标识,便于vue进行列表项的正确排序复用。
   语法: v-for = "(item,index) in items" :key="唯一值"
 特点:

  •  key的值只能是字符串或或者数据类型
  •  key的值必须具有唯一性
  • 推荐使用id作为key(唯一),不推荐使用index作为key(会变化,不对应)

代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>v-for入门</title>
</head>
<body>
  
  <div id="app">
    <p v-for="(name,index) in nameList"> {{index+1}}--{{name}}</p>
   
  </div>
  
  <script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
    createApp({
      data(){
        return {
          nameList: ['张无忌', '张三丰', '韦一笑', '殷天正']
        }
      }
    }).mount('#app')
  </script>
</body>
</html>

        v-bind

                 为HTML标签绑定属性值,如设置 href , css样式等

            语法:

  •                 v-bind:属性名='属性值'
  •                 简化::属性名='属性值'
  •                 v-bind绑定的数据必须要在data中定义。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>v-bind入门</title>
</head>
<body>
  
  <div id="app">
    <a :href='url'>链接1</a>
    <br><br>
    <a :href='url'>链接2</a>
  </div>
  
  <script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
    createApp({
      data(){
        return {
          url:'http://www.jd.com'
        }
      }
    }).mount('#app')
  </script>
</body>
</html>

        v-if/v-else/v-else

                 条件性的渲染某元素,判定为true时渲染,否则不渲染

  •             语法:v-if='表达式',表达式值为true,显示。为:false(隐藏)
  •             原理:基于条件判断,来控制创建或移除元素节点(条件渲染)
  •             场景:要么显示,要么不显示,不频繁的切换的场景
  •             可以配合v-else-if/v-else 进行链式调用判断
        <td>
          <span v-if="user.gender == 1">男</span>
          <span v-else-if="user.gender == 2">女</span>
          <span v-else>其他</span>
        </td>

        v-show  

根据条件展示某元素,区别在于切换的是display属性的值

  •             语法:v-show='表达式',表达式的值为true,显示。为false:隐藏。
  •             原理:基于css样式的display来控制显示与隐藏。
  •             场景:频繁切换显示隐藏的场景。
       <td> 
          <span v-show="user.job == 1">班主任</span>
          <span v-show="user.job == 2">讲师</span>
          <span v-show="user.job != 1 && user.job != 2">其他</span>
       </td>

        v-model

 在表单元素上创建双向数据绑定

            在表单元素上使用,双向数据绑定。可以方便的 获取 或 设置 表单项数据
            语法:v-model='变量名'
            v-model绑定的值必须在data中定义

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>v-model入门</title>
</head>
<body>
  
  <div id="app">
    <input type="text" v-model="msg">
    <span>{{msg}}</span>
  </div>
  
  <script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
    createApp({
      data(){
        return {
          msg:''
        }
      }
    }).mount('#app')
  </script>
</body>
</html>

        v-on

 为HTML标签绑定事件

            语法:
                v-on:事件名='内联语句'
                v-on:事件名='函数名'
                简写: @事件名='' "

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>v-on入门</title>
</head>
<body>
  
  <div id="app">
    <input type="button" v-on:click="name = '哈哈哈' " value="点我一下试试">
    <input type="button" @click="name = 'Vue'" value="再点我一下试试">
    <br>
    <br>
    <input type="button" v-on:click="console.log('试试就试试')" value="点我一下试试">
    <input type="button" v-on:click="handle" value="点我一下试试">
    <input type="button" @click="handle" value="点我一下试试">
    <span>{{name}}</span>
  </div>
  
  <script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
    createApp({
      data(){
        return {
          name: 'Vue'
        }
      },
      methods:{
        handle(){
          console.log('试试就试试~~');
        }
      }
    }).mount('#app')
  </script>
</body>
</html>

综合案例:使用v-for遍历 v-model接收用户输入的值,使用v-if和v-show和v-on添加点击事件

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue3-案例1</title>
  <style>
    table,th,td {
      border: 1px solid #000;
      border-collapse: collapse;
      line-height: 50px;
      text-align: center;
    }

    #center,table {
      width: 60%;
      margin: auto;
    }

    #center {
      margin-bottom: 20px;
    }

    img {
      width: 50px;
    }

    input,select {
      width: 17%;
      padding: 10px;
      margin-right: 30px;
      border: 1px solid #ccc;
      border-radius: 4px;
    }

    .btn {
      background-color: #ccc;
    }
  </style>
</head>

<body>
  <div id="app">
    <div id="center">
      姓名: <input type="text" v-model="name">
      性别:
      <select name="gender" v-model="gender">
        <option value="1">男</option>
        <option value="2">女</option>
      </select>
      职位:
      <select name="job" v-model="job">
        <option value="1">讲师</option>
        <option value="2">班主任</option>
        <option value="3">其他</option>
      </select>

      <input class="btn" type="button" value="查询" @click="search">
    </div>
        <div style="text-align: center;">{{name}} --- {{gender}} --- {{job}}</div>
    <table>
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>头像</th>
        <th>性别</th>
        <th>职位</th>
        <th>入职时间</th>
        <th>更新时间</th>
      </tr>


      <tr v-for="(user, index) in userList" :key="user.id">
        <td>{{index+1}}</td>
        <td>{{user.name}}</td>
        <td> <img :src="user.image"> </td>
        <td>
          <span v-if="user.gender == 1">男</span>
          <span v-else-if="user.gender == 2">女</span>
          <span v-else>其他</span>
        </td>
        <td> 
          <span v-show="user.job == 1">班主任</span>
          <span v-show="user.job == 2">讲师</span>
          <span v-show="user.job != 1 && user.job != 2">其他</span>
       </td>
        <td>{{user.entrydate}}</td>
        <td>{{user.updatetime}}</td>
      </tr>
<!-- 
      <tr v-for="(user, index) in userList" :key="user.id">
        <td>{{index+1}}</td>
        <td>{{user.name}}</td>
        <td> <img :src="user.image"> </td>
        <td>
          {{(user.gender==1 ? '男' : '女')}}
        </td>
        <td> <span  v-if="user.job == 1">老师</span>
              <span v-else-if="user.job == 2">班主任</span>
              <span v-else-if="user.job == 3">其他</span>
       </td>
        <td>{{user.entrydate}}</td>
        <td>{{user.updatetime}}</td>
      </tr> -->

    </table>
  </div>

  <script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

    createApp({
      data() {
        return {
          name:'',
          gender:'',
          job:'',
          userList: [
            {
              "id": 1,
              "name": "谢逊",
              "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/1.jpg",
              "gender": 1,
              "job": 1,
              "entrydate": "2023-06-09",
              "updatetime": "2023-07-01 00:00:00"
            },
            {
              "id": 2,
              "name": "韦一笑",
              "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/2.jpg",
              "gender": 1,
              "job": 1,
              "entrydate": "2023-06-09",
              "updatetime": "2023-07-01 00:00:00"
            },
            {
              "id": 3,
              "name": "黛绮丝",
              "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/3.jpg",
              "gender": 2,
              "job": 2,
              "entrydate": "2023-06-09",
              "updatetime": "2023-07-01 00:00:00"
            },
            {
              "id": 4,
              "name": "殷天正",
              "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/4.jpg",
              "gender": 1,
              "job": 3,
              "entrydate": "2023-06-09",
              "updatetime": "2023-07-01 00:00:00"
            }
          ]
        }
      },
      methods:{
        search(){
          console.log(`用户要搜索的条件是:${this.name} --- ${this.gender} --- ${this.job}`)
        }
      }
    }).mount("#app");
  </script>
</body>

</html>

vue生命周期:

生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法(钩子)

八个状态:

        状态                                        阶段周期

beforeCreate                                创建前

created                                         创建后

beforeMount                                载入前

mounted                                       载入后

beforeUpdate                                数据更新前

updated                                        数据更新后

beforeUnmount                             组件销毁前

unmounted                                    组件销毁后

代码示例:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>生命周期函数</title>
</head>
<body>

    <div id="app">

    </div>

    <script type="module">
         import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

        
         createApp({

                    //组件创建之前执行
                beforecreated(){
                    console.log('组件创建之前执行');
                },

                created(){
                    console.log('组件创建后');
                },

                // 组件载入之前
                beforeMount(){
                    console.log('组件载入之前');
                },

                 // 组件挂载完执行
                mounted(){
                    console.log('组件挂载完毕,自动执行该函数');
                },

                // 组件销毁前
                beforeUnmount(){
                    console.log('组件销毁前');
                },

                // 组件销毁后
                unmounted(){
                    console.log('unmounted  ');
                }
              
         }).mount('#app')
    </script>
    
</body>
</html>

效果:

ajax

 介绍:


        Asynchronous JavaScript And XML,    的JavaScript和XML①。

        
  

 作用:

  •         数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。
  •         异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等等。

案例: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>原生Ajax</title>
</head>
<body>  
    <input id="btn1" type="button" value="获取数据">
    
    <div id="div1"></div>

    <script>
        document.querySelector('#btn1').addEventListener('click', ()=> {
          //1. 创建XMLHttpRequest 
          var xmlHttpRequest  = new XMLHttpRequest();
          
          //2. 发送异步请求
          xmlHttpRequest.open('GET', 'http://47.98.197.202/api/emps/list');
          xmlHttpRequest.send();//发送请求
          
          //3. 获取服务响应数据
          xmlHttpRequest.onreadystatechange = function(){
              if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
                  document.getElementById('div1').innerHTML = xmlHttpRequest.responseText;
              }
          }
        })
    </script>
</body>
</html>

Axios

    介绍:


        Axios 对原生的Ajax进行了封装,简化书写,快速开发。官网:https://www.axios-http.cn/

 使用步骤:

  •         引入axios的js文件(复制官网上)
  •         使用Axios发送请求,并且获取相应的结果
axios入门案例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ajax-Axios</title>
</head>
<body>
    
    <input type="button" value="获取数据GET" id="btnGet">

    <input type="button" value="删除数据POST" id="btnPost">

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>

        // 发送get请求

        document.querySelector('#btnGet').addEventListener('click', () =>{
                    axios({
                    method:'GET',
                    url:'https://mock.apifox.cn/m1/3083103-0-default/emps/list',
                }).then((result) => {
                    console.log(result.data);
                }).catch((err) => {
                    console.log(err);
                });
        });

        // 发送post请求
        document.querySelector('#btnPost').addEventListener('click', () =>{
                    axios({
                    method:'POST',
                    url:' https://mock.apifox.cn/m1/3083103-0-default/emps/update',
                }).then((result) => {
                    console.log(result.data);
                }).catch((err) => {
                    console.log(err);
                });
        });
    </script>
</body>
</html>
简化写法:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ajax-Axios</title>
</head>
<body>
    
    <input type="button" value="获取数据GET" id="btnGet">

    <input type="button" value="删除数据POST" id="btnPost">

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>

        // 发送get请求

        document.querySelector('#btnGet').addEventListener('click', () =>{
                    axios.get('  https://mock.apifox.cn/m1/3083103-0-default/emps/list').then((result) => {
                    console.log(result.data);
                }).catch((err) => {
                    console.log(err);
                });
        });

        // 发送post请求
        document.querySelector('#btnPost').addEventListener('click', () =>{
                    axios.post('https://mock.apifox.cn/m1/3083103-0-default/emps/update').then((result) => {
                    console.log(result.data);
                }).catch((err) => {
                    console.log(err);
                });
        });
    </script>
</body>
</html>
综合案例1:

效果图:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue3-案例1</title>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <style>
    table,th,td {
      border: 1px solid #000;
      border-collapse: collapse;
      line-height: 50px;
      text-align: center;
    }

    #center,table {
      width: 60%;
      margin: auto;
    }

    #center {
      margin-bottom: 20px;
    }

    img {
      width: 50px;
    }

    input,select {
      width: 17%;
      padding: 10px;
      margin-right: 30px;
      border: 1px solid #ccc;
      border-radius: 4px;
    }

    .btn {
      background-color: #ccc;
    }
  </style>
</head>

<body>
  <div id="app">
    <div id="center">
      姓名: <input type="text" v-model="name">
      性别:
      <select name="gender" v-model="gender">
        <option value="1">男</option>
        <option value="2">女</option>
      </select>
      职位:
      <select name="job" v-model="job">
        <option value="1">讲师</option>
        <option value="2">班主任</option>
        <option value="3">其他</option>
      </select>

      <input class="btn" type="button" value="查询" @click="search">
    </div>
        <div style="text-align: center;">{{name}} --- {{gender}} --- {{job}}</div>
    <table>
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>头像</th>
        <th>性别</th>
        <th>职位</th>
        <th>入职时间</th>
        <th>更新时间</th>
      </tr>


      <tr v-for="(user, index) in userList" :key="user.id">
        <td>{{index+1}}</td>
        <td>{{user.name}}</td>
        <td> <img :src="user.image"> </td>
        <td>
          <span v-if="user.gender == 1">男</span>
          <span v-else-if="user.gender == 2">女</span>
          <span v-else>其他</span>
        </td>
        <td> 
          <span v-show="user.job == 1">班主任</span>
          <span v-show="user.job == 2">讲师</span>
          <span v-show="user.job != 1 && user.job != 2">其他</span>
       </td>
        <td>{{user.entrydate}}</td>
        <td>{{user.updatetime}}</td>
      </tr>

    </table>
  </div>

  <script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

    createApp({
      data() {
        return {
          name:'',
          gender:'',
          job:'',
          userList: []
        }
      },
      methods:{
        search(){
            axios.get(`http://47.98.197.202/api/emps/list?name=${this.name}&gender=${this.gender}&job=${this.job}`).then((result) => {
                  this.userList = result.data.data;
            }).catch((err) => {
                console.log(err);
            });
        }
      },

      //声明一个钩子函数 挂载完成就调用search方法
      mounted(){
        this.search();
      }
      
    }).mount("#app");
  </script>
</body>

</html>
综合案例2:
  1. 要求在vue中,基于axios发送异步请求加载员工数据,并渲染展示在表格中。

  2. 点击查询时,还要根据条件动态实现查询功能。

  3. 请求url(GET请求):http://47.98.197.202/api/emps/list

  4. 请求参数:name,gender,job

效果图:

代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue3-案例1</title>
  <style>
    table,th,td {
      border: 1px solid #000;
      border-collapse: collapse;
      line-height: 50px;
      text-align: center;
    }

    #center,table {
      width: 60%;
      margin: auto;
    }

    #center {
      margin-bottom: 20px;
    }

    img {
      width: 50px;
    }

    input,select {
      width: 17%;
      padding: 10px;
      margin-right: 30px;
      border: 1px solid #ccc;
      border-radius: 4px;
    }

    .btn {
      background-color: #ccc;
    }
  </style>
</head>

<body>
  <div id="app">
    <div id="center">
      姓名: <input type="text" v-model="name">
      性别:
      <select name="gender" v-model="gender">
        <option value="1">男</option>
        <option value="2">女</option>
      </select>
      职位:
      <select name="job" v-model="job">
        <option value="1">讲师</option>
        <option value="2">班主任</option>
        <option value="3">其他</option>
      </select>

      <input class="btn" type="button" value="查询" @click="search">
    </div>

    <table>
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>头像</th>
        <th>性别</th>
        <th>职位</th>
        <th>入职时间</th>
        <th>更新时间</th>
      </tr>

      <tr v-for="(user, index) in userList" :key="user.id">
        <td>{{index + 1}}</td>
        <td>{{user.name}}</td>
        <td> <img :src="user.image"> </td>
        <td>
            <span v-show="user.gender == 1">男</span>
            <span v-show="user.gender == 2">女</span>
        </td>
        <td>
            <span v-if="user.job == 1">班主任</span>
            <span v-else-if="user.job == 2">讲师</span>
            <span v-else>其他</span>
        </td>
        <td>{{user.entrydate}}</td>
        <td>{{user.updatetime}}</td>
      </tr>
    </table>
  </div>

  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

    createApp({
      data() {
        return {
            name:'',
            gender:'',
            job:'',

          userList: []

        }
      },

      methods:{
        search(){
                axios.get(`http://47.98.197.202/api/emps/list?name=${this.name}&gender=${this.gender}&job=${this.job} `).then((result) => {
                    this.userList = result.data.data;
                }).catch((err) => {
                    console.log(err);
                });
           }
      },
      mounted(){
            this.search();
      }
    }).mount("#app");
  </script>
</body>

</html>
综合案例3:
  • 完成数据绑定 (将表单项的值绑定到对应的数据模型)。

  • 在上面区域 (p标签部分) 展示数据模型中的各项数据(通过插值表达式的形式)。

  • 点击保存时,需要获取到表单数据,并将其以弹出框形式展示出来(要看到对应中的每一项数据)。

 效果图:

 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>作业5</title>
</head>

<body>
    <!--3 将模型数据和视图进行绑定-->
    <div id="app">
        <!-- 展示模型数据 -->
        <p>输入的姓 名是:{{user.name}}</p>
        <p>输入的年 龄是:{{user.age}}</p>
        <p>选择的性 别是:{{user.gender}}</p>
        <p>选择的爱 好是:{{user.hobby}}</p>

        <hr>
        
        <form action="">
            姓名:<input type="text" v-model="user.name"><br><br>

            年龄:<input type="text"  v-model="user.age"><br><br>

            性别:<input type="radio" value="man"  v-model="user.gender">男
                <input type="radio" value="woman"  v-model="user.gender">女<br><br>
                
            爱好:<input type="checkbox" value="sing" v-model="user.hobby">唱
                <input type="checkbox" value="dance"  v-model="user.hobby">跳
                <input type="checkbox" value="basketball"  v-model="user.hobby">篮球<br><br>
                
                <input type="button" id="btn" value="保存" v-on:click="save">
        </form>
    </div>



<!--2 定义Vue对象,初始化模型数据-->
<script type="module">
        import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
        createApp({
            data() {
                return {
                    user:{
                        name:'',
                        age:'',
                        gender:'',
                        hobby:[]
                    }
                }
            },

            methods:{
                save(){
                    alert(
                        '姓名:'+this.user.name+
                        '年龄:'+this.user.age+
                        '性别:'+this.user.gender+
                        '爱好:'+this.user.hobby
                    )
                }
            }
        }).mount('#app')

</script>

</body>
</html>

综合案例4:

  • 将数据模型中定义的数组内容,遍历展示在table表格中

  • 表格中的 序号,需要从1开始

  • 状态 如果为1,展示启动;如果未0,展示禁用

效果图:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>作业4</title>
</head>

<body>
    <!--3 将模型数据和视图进行绑定-->
    <div id="app">
        <!--扩展需求:在下方表格中展示品牌信息-->
        <table id="brandTable" border="1" cellspacing="0" width="100%">
            <tr>
                <th>序号</th>
                <th>品牌名称</th>
                <th>企业名称</th>
                <th>排序</th>
                <th>品牌介绍</th>
                <th>状态</th>
                <th>操作</th>
            </tr>
            
            <tr align="center" v-for=" (brand,index) in brands">
                <td>{{index + 1}}</td>
                <td>{{brand.brandName}}</td>
                <td>{{brand.companyName}}</td>
                <td>{{brand.ordered}}</td>
                <td>{{brand.description}}</td>
                <td> 
                    <font color="gree" v-show="brand.status == 1">启用</font>
                    <font color="red" v-show="brand.status == 0">禁用</font>
                </td>
                <td><a href="#">修改</a> <a href="#">删除</a></td>
            </tr>
        </table>
    </div>

  <script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
    createApp({
      data() {
        return {
          brands: [{
                brandName: "三只松鼠",
                companyName: "三只松鼠",
                ordered: "100",
                description:"三只松鼠,好吃不上火",
                status: 1
            }, {
                brandName: "优衣库",
                companyName: "优衣库",
                ordered: "10",
                description:"优衣库,服适人生",
                status: 0
            }, {
                brandName: "小米",
                companyName: "小米科技有限公司",
                ordered: "1000",
                description:"为发烧而生",
                status: 0
            }, {
                brandName: "华为",
                companyName: "华为科技有限公司",
                ordered: "100",
                description:"没有伤痕累累,哪来皮糙肉厚,英雄自古多磨难",
                status: 1
            }]
        }
      }
    }).mount('#app')
  </script>
</body>
</html>
综合案例5:

需求:Vue挂载完成后,通过axios发送异步请求到服务端,获取学生列表数据,并通过Vue展示在页面上。

获取数据url:https://mock.apifox.com/m1/3128855-0-default/student

 效果图:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>作业5</title>
    <script src="js/vue.js"></script>
    <script src="js/axios-0.18.0.js"></script>
</head>
<body>
    
    <!-- 需求: Vue挂载完成后,通过axios发送异步请求到服务端,或者学生列表数据,并通过Vue展示在页面上. -->
    <div id="app">
        
        <table border="1" cellspacing="0" width="80%">
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>图像</th>
                <th>年龄</th>
                <th>性别</th>
                <th>成绩</th>
                <th>等级</th>
            </tr>

            <tr align="center" v-for="(stu, index) in students" :key="stu.id">
                <td>{{index + 1}}</td>
                <td>{{stu.name}}</td>
                <td><img :src="stu.image" height="50" width="70"></td>
                <td>{{stu.age}}</td>
                <td>
                    <span v-if="stu.gender == 1">男</span>
                    <span v-else-if="stu.gender == 2">女</span>
                </td>
                <td>{{stu.score}}</td>
                <td>
                    <span style="color: green;" v-if="stu.score>= 85">优秀</span>
                    <span style="color: yellow;" v-else-if="stu.score >= 60 && stu.score < 85">及格</span>
                    <span style="color: red;" v-else-if="stu.score < 60">不及格</span>
                </td>
            </tr>
        </table>
    </div>

  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
    createApp({
      data() {
        return {
          students: []   
        }
      },
      mounted(){
        axios.get('https://mock.apifox.com/m1/3128855-0-default/student').then((result) => {
                    this.students = result.data.data;
                }).catch((err) => {
                    console.log(err);
                });
      }
    }).mount('#app')
  </script>
  </body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1257427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础之集合类

Java基础之集合类 一、集合的框架1.1、集合概述1.2、集合与数组区别1.3、数组的缺点&#xff1a;1.4、常用集合分类1.5、Collection常用方法 二、List集合2.1、ArrayList2.2、LinkedList2.3、Vector2.4、区别 三、Set集合3.1、HashSet集合3.2、LinkedHashSet集合3.3、TreeSet集…

终于等到你!常用的组织架构图模板,高清图片一键导出

组织架构图是一种用来展示一个组织内部人员和职责关系的图表。通过组织架构图&#xff0c;我们可以清晰地了解一个组织的层级架构和各个部门之间的关系。在本文中&#xff0c;我们将向大家推荐8个常用的组织架构图模板&#xff0c;帮助你快速制作出专业的组织架构图。 1. 市场营…

数据结构——动态规划

动态规划&#xff1a;有很多重叠子问题&#xff0c;每一个状态一定是由上一个状态推导出来的 贪心&#xff1a;没有状态推导&#xff0c;而是从局部直接选最优的 动规五步曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 确定递推公式&#xff08;容…

招投标信息可以用CRM系统来查看吗?

对于B2B企业来说获客难、获客成本高是共识。做大客户的企业通过招投标获取商机是一个重要获客途径&#xff0c;然而传统方式管理招投标信息问题很多&#xff0c;例如资料丢失、手工录入出错、信息分散、信息查找费时费力。为了解决这些难题小编推荐CRM系统&#xff0c;CRM系统需…

非参数估计与参数估计的区别,以及详细列举了常用的非参数估计方法和参数估计方法,一网打尽非参数估计与参数估计!!!

文章目录 前言一、非参数估计与参数估计的区别二、常用的非参数估计方法三、常用的参数估计方法总结 前言 非参数估计和参数估计是统计学中的两种不同的估计方法。 一、非参数估计与参数估计的区别 参数估计是指&#xff0c;对于已知分布形式的数据&#xff0c;根据样本数据…

WinEdt打开.tex文件显示error reading错误

原因&#xff1a; 是因为.tex文件中包含了utf-8字符&#xff0c;而在打开的时候并没有指明utf-8打开方式 解决方法 在WinEdt中&#xff0c;【File】-【Open】&#xff08;或使用快捷键CtrlO&#xff09;&#xff0c;在弹出的打开对话框中&#xff0c;右下角【文件名】右侧有…

全面探讨HTTP协议从0.9到3.0版本的发展和特点

前言&#xff1a; 最近的几场面试都问到了http的相关知识点&#xff0c;博主在此结合书籍和网上资料做下总结。本篇文章讲收录到秋招专题&#xff0c;该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮…

EI期刊论文复现:考虑电动汽车可调度潜力的充电站两阶段市场投标策略程序代码!

本程序代码参考EI期刊论文《考虑电动汽车可调度潜力的充电站两阶段市场投标策略》&#xff0c;程序中基于历史数据评估可调度潜力&#xff0c;由联合报价模型确定节点边际电价&#xff0c;作为报价的参考&#xff0c;包含个体竞价模式&#xff0c;纳什博弈竞价&#xff0c;算例…

PC8231(CC/CV)5V/2.4A同步降压芯片 频率可调 限流欠压补偿

一&#xff0e;概述 PC8231 是一款同步降压转换器&#xff0c; 该转换器可驱动输出 2.4A 负载电流。 设计允许 PC8231 在 9V 到40V 宽输入电压范围内工作。通过将 COMP/EN 引脚逻辑电平拉低来实现外部关断功能&#xff0c;并进入待机模式。外部补偿使反馈控制环路具有良好的线…

相机内存卡照片删除怎么恢复?没有备份可这样操作

在使用相机时&#xff0c;不小心删除了重要的照片可能是每位摄影爱好者的噩梦。然而&#xff0c;通过一些恢复方法&#xff0c;我们有机会挽救被删除的照片。本文将详细介绍相机内存卡照片删除恢复的方法。 图片来源于网络&#xff0c;如有侵权请告知 如果您误删了相机内存卡中…

网络篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、说说 TCP 与 UDP 的区别,以及各自的优缺点二、说一下 HTTP 和 HTTPS 的区别三、说说HTTP、TCP、Socket 的关系是什么?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,…

在NAS上部署.NET版本的WOL远程开机服务

在本文中&#xff0c;我们将以部署基于.NET的WOL远程开机服务为例&#xff0c;详细介绍如何利用Docker技术在群辉部署ASP.NET服务。同时&#xff0c;我们还将展示如何对原有的控制台WOL进行改造&#xff0c;以及如何使用SignAuthorization简易URL验签类库。文章相关的代码开源地…

卤素灯和白炽灯哪个更护眼?精选高品质的护眼台灯

如果是放在以前&#xff0c;我觉得卤素灯会比白炽灯会眼一点。不过在如今这个高速发展的时代&#xff0c;灯源的迭代也经历了一轮又一轮&#xff0c;对于目前来说最护眼的还是LED护眼台灯 因为卤素灯和白炽灯产生的光线包含大量的红外线和紫外线&#xff0c;并且具有较高的亮度…

python树的孩子链存储结构

树的孩子链存储结构是一种树的存储方式&#xff0c;它使用孩子兄弟表示法来表示树的结构。在这种存储结构中&#xff0c;树的每个节点都有一个指向其第一个孩子的指针和一个指向其下一个兄弟的指针。这样&#xff0c;可以通过这些指针来表示树的层次结构和节点之间的关系。 具…

前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

前言 当我们重新部署前端项目的时候&#xff0c;如果用户一直停留在页面上并未刷新使用&#xff0c;会存在功能使用差异性的问题&#xff0c;因此&#xff0c;当前端部署项目后&#xff0c;需要提醒用户有去重新加载页面。 技术框架 vue、js、webpack 解决方案 编译项目时动…

C#、.net、asp.net 超快超简单(一看就会)将redis添加到自己的项目中

背景&#xff1a;凌晨两点&#xff0c;隔壁楼情侣闹得欢&#xff0c;本单身狗不服气&#xff0c;决定总结一下今晚添加到项目的redis。 我的使用场景&#xff1a;asp.net core web apivue3的项目中数据库的权限表是最经常读取的&#xff0c;所以权限表中的数据放到redis中最为…

java Swing UI设置统一字体大小

编写一个遍历组件设置字体大小的方法 public static void setUIFont() {Font f new Font("宋体", Font.PLAIN, 18);String names[] {"Label", "CheckBox", "PopupMenu", "MenuItem", "CheckBoxMenuItem", &quo…

基于springboot+Web实现社区医院管理服务系统项目【项目源码+论文说明】

基于springbootWeb实现社区医院管理服务系统演示 摘要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括社区医院管理服务系统的网络应用&#xff0c;在外国线上管理系统已经是很普遍的方式&#xff0c;不过国内的管理系统可…

SAP是什么公司,开发什么系统软件?

SAP 是公司原德语名称 Systemanalyse Programmentwicklung 的首字母缩写&#xff0c;意思是系统分析程序开发 (System Analysis Program Development) 。现在&#xff0c;公司的注册名称为 SAP SE&#xff0c;其中 SE 代表 societas Europaea&#xff0c;是指根据欧盟公司法注册…

有关循环依赖和三级缓存的这些问题,你都会么?(面试常问)

一、什么是循环依赖 大家平时在写业务的时候应该写过这样的代码。 其实这种类型就是循环依赖&#xff0c;就是AService 和BService两个类相互引用。 二、三级缓存可以解决的循环依赖场景 如上面所说&#xff0c;大家平时在写这种代码的时候&#xff0c;项目其实是可以起来的&am…