Javaweb(前端)

news2024/12/31 6:20:55

目录

Web开发

Web前端

HTML+CSS

盒子模型

JavaScript

js引入方式

js基础语法

 js函数

js对象(JSON+BOM+DOM)

js事件监听

Vue

​编辑Vue快速入门

 Vue常用指令

Vue生命周期

 Ajax

原生Ajax

Axios 

 YApi(应用网页)

前端工程化

 Vue-cli 

Vue组件库Element 

 Vue路由

打包部署 


Web开发

web:全球广域网,也称万维网www(World Wide Web),能够通过浏览器访问的网站。

web网站的工作流程:

浏览器根据请求的域名请求对应的前端服务器,前端服务器接受请求之后,会把对应的前端代码响应回浏览器,(浏览器也是一个程序,里面有自动引擎,会自动解析前端的代码,显示)浏览器解析到前端代码中去哪(url)获取数据,浏览器会根据url访问(请求)后端Java程序,后端Java程序会继续访问(请求)数据库服务器,数据库服务器响应响应的数据返回给后端Java程序,后端Java程序在响应给浏览器,浏览器渲染展示出来。

前后端分离开发:需求分析-->接口定义 (API接口文档)-->前后端并行开发 (遵守规范)--->前端、后端)-->前后端联调测试

Web前端

不同的浏览器,内核不同,对应相同的前端代码解析的效果会产生的效果存在差异。就需要有统一的网页标准。

 HTML:相当于骨架 ,负责网页的结构。

CSS:丰富其内容会生动,负责网页的表现。

 JavaScript:可以让网页产生交互,动起来,负责网页的行为。

HTML+CSS

HTML:超文本标记语言。

CSS:层叠样式表,用于控制页面的样式(表现) 

 

<img scr=url width= height= >
 <!-- img标签:
       src:图片资源路径
       width:宽度 (px: 像素; %,相对于父元素的百分比)
       height:高度
       绝对路径:
          1、绝对磁盘路径:
          <img src="C:\Users\Lenovo\Desktop\javaweb\day01-HTML-CSS\day01-HTML-CSS\资料\3. 图片、音频、视频\img\news_logo.png">
          <img src="D:\Javaweb\img\news_logo.png">
          2、绝对网路路径:
          <img src="https://search-operate.cdn.bcebos.com/e8cbce1d53432a6950071bf26b640e2b.gif">
        
        相对路径:相对于这个网页的位置
                  ./:当前目录 ./可以省略
                 ../:上一级目录 不能省略
                <img src="./img/news_logo.png">
                <img src="img/news_logo.png">
    -->

CSS选择器
span{}  .cls{} #time{}
   <style>
        h1 {
            color: #4D4F53;
        }
        /* id>类>元素 
         元素选择器 
         span {
            color: red;
        } 

         类选择器 
        .cls {
            color: green;
        } 
        
         ID选择器 */
        #time {
            color: #968D92;
            font-size: 13px; /* 设置字体大小 */
        }

    </style>

超链接<a href="" target="_self或_blank"></a>
 <!-- 
        标签:<a>
         href:指定资源访问的url
         target:指定在何处打开资源链接
                _self:默认值,在当前页面打开
                _blank:在空白页面打开
     -->

视频<video src="" controls width="" height=""></video>
音频<audio src="" controls></audio>
   <!--
     视频标签 <video>
             src:规定视频的url
             controls:显示播放控件
             width:播放器的宽度
             height:播放器的高度
    音频标签 <audio>
           src:规定音频的url
           controls:显示播放控件
    段落标签:<p>
    文本加粗标签:<b> </strong>
     -->
font-size:10px; 设置字体的大小
text-decoration:none; 设置文本为一个标准的文本
text-index:30px; 设置首行缩进
line-height:35; 设置行高
text-aligh:right;设置对齐方式

盒子模型

<title>盒子模型</title>
    <style>
        /* CSS盒子模型 */
        /* 组成:内容 content 内边距 padding 边框 border 外边距 margin */
        div {
            width: 200px;/* 设置宽度 */
            height: 200px;/* 设置高度 */
             /* 设置边框属性 */
            box-sizing: border-box; /* 指定width height为盒子的高宽 如果没有border-box 宽和高指的是内容的大写 */
            background-color: aquamarine; /* 背景色 */
            /* padding-top padding-left padding-right */
            padding: 20px; /* 内边距, 上 右 下 左 */
            border: 10px solid red; /* 边框, 宽度 线条类型-solid-直线 颜色 */
            margin: 30px; /* 外边距, 上 右 下 左 */
        }
    </style>

 表格table

<table>定义表格

     <tr>定义表格中的行,一个<tr>表示一行

     <th>表示表头单元格,具有加粗居中效果

     <td>表示普通单元格

表单form 

<!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>HTML-表单项标签</title>
</head>
<body>
<!--
     场景:在网页中主要负责数据采集功能,如 注册、登录等数据采集
    标签:<form>
    表单项:不同类型的input元素、下拉列表、文本域等
    <input>:定义表单项,通过type属性控制输入形式
    <select>:定义下拉列表
    <textarea>:定义文本域

    form表单属性: 
        action: 表单提交的url, 往何处提交数据 . 如果不指定, 默认提交到当前页面
        method: 表单的提交方式 .
            get: 在url后面拼接表单数据, 比如: ?username=Tom&age=12 , url长度有限制 . 默认值
            post: 在消息体(请求体)中传递的, 参数大小无限制的.
    <input>:定义表单项,通过type属性控制输入形式
             type取值
                 text:默认值,定义单行的输入字段
                 password 定义密码字段
                 radio 定义单选按钮
                 checkbox 定义复选框
                 file 定义文件上传按钮
                 date/time/datetime-local 定义日期/时间/日期时间
                 number 定义数字输入框
                 email 定义邮件输入框
                 hidden 定义隐藏域
                 submit/reset/button 定义提交按钮/重置按钮/可点击按钮
    <select>:定义下拉列表
    <textarea>:定义文本域
    
 -->
<!-- value: 表单项提交的值 -->
 <form action="" method="post">
   姓名:<input type="text" name="name"><br><br>
   密码:<input type="password" name="password"> <br><br>
   性别: <label><input type="radio" name="gender" value="1">男</label>
   <label><input type="radio" name="gender" value="2">女</label><br><br>
   爱好:<label><input type="checkbox" name="hobby" value="java">java</label>
   <label><input type="checkbox" name="hobby" value="game">game</label>
   <label><input type="checkbox" name="hobby" value="sing">sing</label><br><br>
   图像:<input type="file" name="image"><br><br>
   生日:<input type="date" name="date"><br><br>
   时间:<input type="time" name="time"><br><br>
   日期时间:<input type="datetime-local" name="datetime"> <br><br>
   邮箱:<input type="email" name="email"><br><br>
   年龄:<input type="number" name="age"><br><br>
   学历:<select name="degree" >
        <option value="">-----------请选择----------</option>
        <option value="1">大专</option>
        <option value="2">本科</option>
        <option value="3">硕士</option>
        <option value="4">博士</option>
   </select><br><br>
   描述:<textarea name="description" cols="30" rows="10"></textarea><br><br>
   <input type="hidden" name="id" value="1">
   <input type="button" value="按钮">
   <input type="reset" value="重置">
   <input type="submit" value="提交">
 </form>
<br><br>

</body>
</html>

JavaScript

JavaScript(简称:JS) 是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互

js引入方式

 <!-- 内部脚本 -->
     <script>
        alert("Hello JS");//定义弹出框
    </script> 
    
    <!-- 外部脚本 -->
    <script src="js/demo.js"></script>

内部脚本:将JS代码定义在html页面的<script></script>中

       建议:将<script></script>放在<body>的底部

外部脚本:将JS代码定义在js文件中,通过<script></script>标签引入

       注意:通过<script>标签引入外部js文件时,标签不可以自闭合 

js基础语法

输出语句

<script>
    window.alert("Hello JS"); //弹出框
    alert("hello everyone");//可以省略window
    document.write("Hello JS"); //写入HTML页面

    console.log("Hello JS"); //浏览器控制台
   </script> 

变量

JavaScript 中用 var 关键字(variable 的缩写)来声明变量 。

JavaScript 是一门弱类型语言,变量可以存放不同类型的值 。

变量名需要遵循如下规则:

         组成字符可以是任何字母、数字、下划线(_)或美元符号($)

         数字不能开头

         建议使用驼峰命名

变量特点:JS是弱类型语言,变量可以存放不同类型的值

声明:   

         var:声明变量,全局作用域/函数作用域,允许重复声明   

         let:声明变量,块级作用域,不允许重复声明     

         const:声明常量,一旦声明,常量的值不能改变

<script>
    //定义变量
    var a = 0;
    a = "A";

    alert(a);

    // var 定义的是一个全局变量, 还可以重复声明
    {
        var a = 0;
        var a = "A";
    }
    alert(a);
    

    // let 定义的是一个局部变量, 不可以重复声明
    {
        let a = 0;
        a = "A";

        alert(a);
    }
    
    //const 定义的是一个常量
    const pi = 3.14;
    //pi = 3.15;

    alert(pi);

</script>

数据类型 

 number:数字(整数、小数、NaN(Not a Number))  

string:字符串,单双引皆可  

boolean:布尔。true,false  

null:对象为空  

undefined:当声明的变量未初始化时,该变量的默认值是 undefined

使用 typeof 运算符可以获取数据类型

<script>
   
    //原始数据类型
    alert(typeof 3); //number
    alert(typeof 3.14);//number

    alert(typeof "A"); //string
    alert(typeof 'Hello');//string

    alert(typeof true);//boolean
    alert(typeof false);//boolean

    alert(typeof null);//object

    var a ;
    alert(typeof a);//undefined
        
</script>

运算符 

==会进行类型转换去比较  ===不会进行类型转换

<script>
    /* ==会进行类型转换去比较 ===不会进行类型转换 */
    var age = 20;
    var _age = "20";
    var $age = 20;
    
    alert(age == _age); //true
    alert(age === _age); //false
    alert(age === $age); //true
</script>

类型转换

<script>    
    // 类型转换 - 其他类型转为数字
    alert(parseInt("12")); //12
    alert(parseInt("1222A45")); //1222
    alert(parseInt("A45")); //NaN(not a number)

    // 类型转换 - 其他类型转为boolean
    if(0){ //false
        alert("0 转换为false");
    }

    if(NaN){ //false
        alert("NaN 转换为false");
    }

    if(-1){ //true
        alert("除0和NaN其他数字都转为 true");
    }

    if(""){ //false
        alert("空字符串为 false, 其他都是true");
    }
        
    if(null){ //false
        alert("null 转化为false");
    }

    if(undefined){ //false
        alert("undefined 转化为false");
    }

</script>

 js函数

<script>
    /* 
       function functionName(参数1,参数2)
       {

       }
       形式参数不需要类型 因为javScript是弱类型语言
       返回值也不需要定义类型,可以在函数内部直接使用return返回即可
    */
    //定义函数---1
    // function add(a,b){
    //    return  a + b;
    // }
    //  function sub(a,b)
    //  {
    //     return a-b;
    //  }
    //  var sum=sub(20,10);
    //  alert(sum);
    //定义函数-----2
    
    var add = function(a,b){
        return  a + b;
    }
    
       var sub=function(a,b)
       {
        return a-b;
       }
    
       
    //函数调用
   var result = add(10,20);
   alert(result);
   
    
</script>

js对象(JSON+BOM+DOM)

Array

<script>
    //定义数组
    // var arr=new Array(1,2,"123","1sad");
    //  alert(arr);

    var arr=[1,'a','3'];
    alert(arr);
    for (let i = 0; i < arr.length; i++) {
        const element = arr[i];
        document.write(element);
        
    }

    //特点: 长度可变 类型可变
     var arr = [1,2,3,4];
     arr[10] = 50;

     arr[9] = "A";
     arr[8] = true;

     console.log(arr);


   //forEach: 遍历数组中有值的元素
    var arr = [1,2,3,4];
    arr[10] = 50;
    arr.forEach(function(e) {
        document.write(e);
    });

    //ES6 箭头函数: (...) => {...} -- 简化函数定义
    arr.forEach((e) => {
        console.log(e);
    }) 
    
    //push: 添加元素到数组末尾
    arr.push(7,8,9);
    console.log(arr);

 
    //splice: 删除元素 从第几个位置开始删 删的长度
    arr.splice(2,2);
    console.log(arr);
</script>

String

<script>
    //创建字符串对象
    //var str = new String("Hello String");
    var str = "  Hello String    ";
    
    console.log(str);

    //length
    console.log(str.length);

    //charAt 返回指定字符串的位置
    console.log(str.charAt(4));
    

    //indexOf 检索字符串
    console.log(str.indexOf("lo"));
    

    //trim 去掉字符串两边的空格
    var s = str.trim();
    str.trim()
    console.log(s);

    //substring(start,end) --- 开始索引, 结束索引 (含头不含尾) 提取两个指定的索引号之间的字符
    console.log(s.substring(0,5));

</script>
JSON

概念:JavaScript Object Notation,JavaScript对象标记法。

JSON 是通过 JavaScript 对象标记法书写的文本。

<script>
   // 自定义对象
    var user = {
        name: "Tom",
        age: 10,
        gender: "male",
        // eat: function(){
        //     alert("用膳~");
        // }
        eat(){
            alert("用膳~");
        }
    }

   alert(user.name);
    user.eat();

    //定义json--多用于数据载体,在网络中进行数据传输
    var jsonstr = '{"name":"Tom", "age":18, "addr":["北京","上海","西安"]}';
    alert(jsonstr.name);//不能用对象的方式去获取 jsonstr相当于一个字符串

    //json字符串--js对象 parse json字符串转化未js对象
    var obj = JSON.parse(jsonstr); 
    alert(obj.name);

    //js对象--json字符串 stringify js对象转为json字符串
    alert(JSON.stringify(obj)); 

    var jsonstr1='{"name":"Tom","age":18,"addr":["哈哈哈","hhh"]}';
    document.write(jsonstr1);
    var obj=JSON.parse(jsonstr1);
    document.write("</br>");
    document.write(obj);
    document.write("</br>");
    document.write(JSON.stringify(obj));
</script>
BOM

  BOM:Browser Object Model 浏览器对象模型,运行JavaScript与浏览器对话, JavaScript将浏览器的各个部分封装为对象

     Window:浏览器窗口对象

     Navigator:浏览器对象

     Screen:屏幕对象

     History:历史记录对象

     Location:地址栏对象

Window

<script>
    //获取
    window.alert("Hello BOM");
    alert("Hello BOM Window");

    //方法
   // confirm - 对话框 -- 确认: true , 取消: false
     var flag = confirm("您确认删除该记录吗?");
    alert(flag);

    //定时器 - setInterval -- 周期性的执行某一个函数--周期性执行
    var i = 0;
    setInterval(function(){
        i++;
        console.log("定时器执行了"+i+"次");
    },2000);

    // 定时器 - setTimeout -- 延迟指定时间执行一次-- 在指定的毫秒数后调用函数或计算表达式--只执行一次
    setTimeout(function(){
        alert("JS");
    },3000);


    var i=0;
    setInterval(function(){
       i++;
       alert("定时器执行了"+i+"次");
    },2000);
</script>

Location

<script>   
 //自动跳转到这个网页
     alert(location.href);
     location.href="https://www.baidu.com";
</script>
DOM

    DOM:Document Object Model 文档对象模型, 将标记语言的各个组成成分封装为对应的对象.

获取元素 

<body>
    <img id="h1" src="img/off.gif">  <br><br>

    <div class="cls">传智教育</div>   <br>
    <div class="cls">黑马程序员</div>  <br>

    <input type="checkbox" name="hobby"> 电影
    <input type="checkbox" name="hobby"> 旅游
    <input type="checkbox" name="hobby"> 游戏
</body>

<script>
    //1. 获取Element元素
    
    document.getElementById('');
    document.getElementsByTagName('');
    document.getElementsByName('');
    document.getElementsByClassName('');
     

   // 1.1 获取元素-根据ID获取,返回单个Element对象
    var img = document.getElementById('h1');  
    alert(img);

    //1.2 获取元素-根据标签获取 - div-返回Element对象数组
    var divs = document.getElementsByTagName('div');
    for (let i = 0; i < divs.length; i++) {
        alert(divs[i]);
    }
    
    //1.3 获取元素-根据name属性获取-返回Element对象数组
    var ins = document.getElementsByName('hobby');
    for (let i = 0; i < ins.length; i++) {
        alert(ins[i]);
    }

    //1.4 获取元素-根据class属性获取-返回Element对象数组
    var divs = document.getElementsByClassName('cls');
    for (let i = 0; i < divs.length; i++) {
        alert(divs[i]);
    }

</script>

案例 

<!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>JS-对象-DOM-案例</title>
</head>

<body>
    <img id="h1" src="img/off.gif">  <br><br>

    <div class="cls">传智教育</div>   <br>
    <div class="cls">黑马程序员</div>  <br>

    <input type="checkbox" name="hobby"> 电影
    <input type="checkbox" name="hobby"> 旅游
    <input type="checkbox" name="hobby"> 游戏
</body>

<script>
     //1. 点亮灯泡 : src 属性值
    var img = document.getElementById('h1');
    img.src = "img/on.gif";

    // //2. 将所有div标签的内容后面加上: very good (红色字体) -- <font color='red'></font>
    var divs = document.getElementsByTagName('div');
    for (let i = 0; i < divs.length; i++) {
        const div = divs[i];
        div.innerHTML += "<font color='red'>very good</font>"; 
    }
    
    // //3. 使所有的复选框呈现选中状态
    var ins = document.getElementsByName('hobby');
    for (let i = 0; i < ins.length; i++) {
        const check = ins[i];
        check.checked = true;//选中
    }
</script>
</html>

js事件监听

 事件:HTML事件是发生在HTML元素上的"事情"

            例如:按钮被点击

                  鼠标移动到元素上

                  按下键盘按键

 事件监听:JavaScript可以在事件被侦测到时执行代码

事件绑定

<body>
    <!-- 方式一:通过 HTML标签中的事件属性进行绑定 -->
    <input type="button" id="btn1" value="事件绑定1" onclick="on()">
    <!-- 方式二:通过 DOM 元素属性绑定 -->
    <input type="button" id="btn2" value="事件绑定2">
</body>

<script>
    function on()
    {
        alert("按钮1被点击了...");
    }
    document.getElementById("btn2").onclick=function()
    {
        alert("按钮2被点击了...");
    }
</script>

常见事件

<script>
    //onload : 页面/元素加载完成后触发
    function load(){
        console.log("页面加载完成...")
    }

    //onclick: 鼠标点击事件
    function fn1(){
        console.log("我被点击了...");
    }

    //onblur: 失去焦点事件
    function bfn(){
        console.log("失去焦点...");
    }

    //onfocus: 元素获得焦点
    function ffn(){
        console.log("获得焦点...");
    }

    //onkeydown: 某个键盘的键被按下
    function kfn(){
        console.log("键盘被按下了...");
    }

    //onmouseover: 鼠标移动到元素之上
    function over(){
        console.log("鼠标移入了...")
    }

    //onmouseout: 鼠标移出某元素
    function out(){
        console.log("鼠标移出了...")
    }

    //onsubmit: 提交表单事件
    function subfn(){
        alert("表单被提交了...");
    }

</script>

事例

<!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>JS-事件-案例</title>
</head>
<body>

    <img id="light" src="img/off.gif"> <br>

    <input type="button" value="点亮" onclick="on()"> 
    <input type="button"  value="熄灭" onclick="off()">

    <br> <br>

    <input type="text" id="name" value="ITCAST" onfocus="lower()" onblur="upper()">
    <br> <br>

    <input type="checkbox" name="hobby"> 电影
    <input type="checkbox" name="hobby"> 旅游
    <input type="checkbox" name="hobby"> 游戏
    <br>

    <input type="button" value="全选" onclick="checkAll()"> 
    <input type="button" value="反选" onclick="reverse()">

</body>

<script>

    //1. 点击 "点亮" 按钮, 点亮灯泡; 点击 "熄灭" 按钮, 熄灭灯泡; -- onclick
    function on(){
        //a. 获取img元素对象
        var img = document.getElementById("light");

        //b. 设置src属性
        img.src = "img/on.gif";
    }

    function off(){
        //a. 获取img元素对象
        var img = document.getElementById("light");

        //b. 设置src属性
        img.src = "img/off.gif";
    }



    //2. 输入框聚焦后, 展示小写; 输入框离焦后, 展示大写; -- onfocus , onblur
    function lower(){//小写
        //a. 获取输入框元素对象
        var input = document.getElementById("name");

        //b. 将值转为小写
        input.value = input.value.toLowerCase();
    }

    function upper(){//大写
        //a. 获取输入框元素对象
        var input = document.getElementById("name");

        //b. 将值转为大写
        input.value = input.value.toUpperCase();
    }



    //3. 点击 "全选" 按钮使所有的复选框呈现选中状态 ; 点击 "反选" 按钮使所有的复选框呈现取消勾选的状态 ; -- onclick
    function checkAll(){
        //a. 获取所有复选框元素对象
        var hobbys = document.getElementsByName("hobby");

        //b. 设置选中状态
        for (let i = 0; i < hobbys.length; i++) {
            const element = hobbys[i];
            element.checked = true;
        }

    }
    
    function reverse(){
        //a. 获取所有复选框元素对象
        var hobbys = document.getElementsByName("hobby");

        //b. 设置未选中状态
        for (let i = 0; i < hobbys.length; i++) {
            const element = hobbys[i];
            element.checked = false;
        }
    }
</script>
</html>

Vue

 Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写

    基于MMVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上

    框架:是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。基于框架进行开发,更加快捷、更加高效

Vue快速入门

<!DOCTYPE html>
<html lang="en">
<head>
     <!-- 1、引入Vue.js -->
    <script src="js/vue.js"></script>
</head>
<body>
<!-- 
    Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写
    基于MMVM思想,实现数据的双向绑定,将编程的关注点放在数据上
    框架:是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。基于框架进行开发,更加快捷、更加高效
-->
    <!-- 3、编写视图 -->
     <div id="app">
        <input type="text" v-model="message">
        {{ message }}  <!-- 插值表达式 -->
     </div>

</body>
<!-- 2、在JS代码区域,创建Vue核心对象,定义数据模型 -->
<script>
    new Vue({
        el:"#app",//代表接管区域
        data:
        {
            message:"Hello Vue!"
        }
    })
</script>
</html>

 Vue常用指令

 v-bind v-model

<!DOCTYPE html>
<html lang="en">
<head>
   <script src="js/vue.js"></script>
</head>
<body>
    <!--
       v-bind:为HTML标签绑定属性值,如设置href css样式等--单向数据绑定 数据只能从data流向页面
       v-model:在表单元素上创建双向数据绑定 双向--数据不仅能从data流向页面 还能从页面流向数据
       v-bind v-model必须在数据模型中声明
     -->
  <div id="app">
    <a v-bind:href="url">百度</a>
    <a :href="url">百度</a>
    <input type="text" v-model="url">
  </div>
</body>
<script>
    new Vue({
        el:"#app",
        data:{
          url:"https://www.baidu.com"
        }
    })
</script>
</html>

v-on 

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <!-- v-on 为HTML标签绑定事件 -->
        <!-- v-on:event 用什么写什么 click blur... -->
        <input type="button" value="点我一下" v-on:click="handle()" >

        <input type="button" value="点我一下" @click="handle()">
</body>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           
        },
        methods: {
            handle:function()
            {
                alert("你点我了一下...");
            }
        }
    })
</script>
</html>

v-if v-show

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        
        年龄<input type="text" v-model="age">经判定,为:
        <span v-if="age<=35">年轻人(35及以下)</span>
        <span v-else-if="age>35&&age<60">中年人(35-60)</span>
        <span v-else>老年人(60及以上)</span>

        <br><br>

        年龄<input type="text" v-model="age">经判定,为:
        <span v-show="age<=35">年轻人(35及以下)</span>
        <span v-show="age>35&&age<60">中年人(35-60)</span>
        <span v-show="age>=60">老年人(60及以上)</span>

    </div>
</body>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           age: 20
        },
        methods: {
            
        }
    })
</script>
</html>

v-for 

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="js/vue.js"></script>
</head>
<body>
    <!-- v-for 列表渲染,遍历容器的元素或者对象的属性 -->
    <div id="app">
        <div v-for="addr in addrs">{{addr}}</div>
        <hr>
    <div v-for="(addr,index) in addrs">{{index+1}}:{{addr}}</div>

    </div>
</body>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           addrs:["北京", "上海", "西安", "成都", "深圳"]
        },
        methods: {
            
        }
    })
</script>
</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>Vue-指令-案例</title>
    <script src="js/vue.js"></script>
</head>
<body>
    
    <div id="app">
        
        <table border="1" cellspacing="0" width="60%">
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <th>成绩</th>
                <th>等级</th>
            </tr>

            <tr align="center" v-for="(user,index) in users">
                <td>{{index+1}}</td>
                <td>{{user.name}}</td>
                <td>{{user.age}}</td>
                <td>
                    <span v-if="user.gender==1">男</span>
                    <span v-else>女</span>
                </td>
                <td>{{user.score}}</td>
                <td>
                    <span v-if="user.score>=85">优秀</span>
                    <span v-else-if="user.score>=60">及格</span>
                    <span v-else style="color: red;">不及格</span>
                </td>
            </tr>
        </table>

    </div>

</body>

<script>
    new Vue({
        el: "#app",
        data: {
            users: [{
                name: "Tom",
                age: 20,
                gender: 1,
                score: 78
            },{
                name: "Rose",
                age: 18,
                gender: 2,
                score: 86
            },{
                name: "Jerry",
                age: 26,
                gender: 1,
                score: 90
            },{
                name: "Tony",
                age: 30,
                gender: 1,
                score: 52
            }]
        },
        methods: {
            
        },
    })
</script>
</html>

Vue生命周期

(一)创建阶段
1. beforeCreate
  => 创建 Vue 实例以前

  => 执行完毕这个钩子函数, 就会生成实例了

2. created
  => 创建 Vue 实例以后

  => 执行完毕这个钩子函数, 才会去捕获页面上的内容, 准备渲染页面

3. beforeMount
  => 挂载 数据 之前

  => 拿到页面结构, 准备渲染到页面上之前

  => 执行完毕这个钩子函数, 就会把准备好的数据渲染到页面上了

4. mounted
  => 挂载 数据 之后

  => 把 data 中的数据已经渲染到该渲染的标签上了

(二)更新阶段
5. beforeUpdate
  => 更新数据之前

  => 当你该实例的内容被更新的时候, 会在更新之前执行这个钩子函数

6. updated
  => 更新数据之后

  => 当你该实例的内容被更新以后, 渲染完毕页面会执行这个钩子函数

(三)销毁阶段
7. beforeDestroy
  => 销毁实例之前

  => 当你准备销毁当前实例了

  => 执行完毕这个钩子, 才会销毁当前实例

8. destroyed
  => 销毁实例之后

  => 当你销毁完毕这个实例了, 那么会执行一遍这个钩子函数, 然后整个 Vue 生命周期结束

  => 再也没有 Vue 实例了

 

 Ajax

Ajax --异步的Javascript和XML

       作用:

           数据交换:通过Ajax可以给服务器发送请求,并获取服务器相应的数

           异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如搜索联想,用户名是否可用的校验等

 

原生Ajax

<script>
    function getData(){
        //1. 创建XMLHttpRequest 
        var xmlHttpRequest  = new XMLHttpRequest();
        
        //2. 发送异步请求
        xmlHttpRequest.open('GET','http://yapi.smart-xwork.cn/mock/169327/emp/list');
        xmlHttpRequest.send();//发送请求
        
        //3. 获取服务响应数据
        xmlHttpRequest.onreadystatechange = function(){
            if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
                document.getElementById('div1').innerHTML = xmlHttpRequest.responseText;
            }
        }
    }
</script>

Axios 

 Axios 对原生的Ajax进行了封装,简化书写,快速开发

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="js/axios-0.18.0.js"></script>
    <script src="js/vue.js"></script>
</head>
<body>
    
    <input type="button" value="获取数据GET" onclick="get()">

    <input type="button" value="删除数据POST" onclick="post()">

</body>
<script>
    function get(){
        //通过axios发送异步请求-get
        // axios({
        //     method: "get",
        //     url: "http://yapi.smart-xwork.cn/mock/169327/emp/list"
        // }).then(result => {
        //     console.log(result.data);
        // })

       /* 前面的是把数据请求过来,中括号里的是调取数据,比如可以用数据进行赋值,显示,res是载体 */
        axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result => {
            console.log(result.data);
        })
    }
    axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result=>{
         console.log(result.data);
    })

    function post(){
        //通过axios发送异步请求-post
        // axios({
        //     method: "post",
        //     url: "http://yapi.smart-xwork.cn/mock/169327/emp/deleteById",
        //     data: "id=1"
        // }).then(result => {
        //     console.log(result.data);
        // })

        axios.post("http://yapi.smart-xwork.cn/mock/169327/emp/deleteById","id=1").then(result => {
            console.log(result.data);
            document.write(result.data);
        })
    }
    /* axois.delete(url,[config]).then(result=>{
            console.log(result.data);
     })
            
         axois.put(url,[config]).then(result=>{
            console.log(result.data);
         })
      
     */
</script>
</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>
    <script src="js/axios-0.18.0.js"></script>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <table border="1" cellspacing="0" width="60%">
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <!-- <th>职位</th>
                <th>入职日期</th>
                <th>最后操作时间</th> -->
            </tr>

            <tr align="center" v-for="(emp,index) in emps">
                <td>{{index + 1}}</td>
                <td>{{emp.name}}</td>
                <td>
                    <!-- <img :src="emp.image" width="70px" height="50px"> -->{{emp.age}}
                </td>
                <td>
                    <span v-if="emp.gender == 1">男</span>
                    <span v-if="emp.gender == 2">女</span>
                </td>
                <!-- <td>{{emp.job}}</td>
                <td>{{emp.entrydate}}</td>
                <td>{{emp.updatetime}}</td> -->
            </tr>
        </table>
    </div>
</body>
<script>

    new Vue({
       el: "#app",
       data: {
         emps:[]
       },
       mounted () {
          //发送异步请求,加载数据
          axios.get("https://yapi.pro/mock/481093/user/getById").then(result => {
            this.emps = result.data.user;
          })
       }
    });
</script>
</html>

 YApi(应用网页)

介绍:YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务

主要功能:API接口管理、Mock服务(主要用于前端调式前端代码)

YApi--网址

YApi : 添加项目 -->添加分类--> 添加接口 

前端工程化

 Vue-cli 

Vue项目目录结构

 

Vue项目--启动

 Vue中修改端口号

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  /* 更改前端的端口号 */
  devServer:{
    port:8090,
  }
})

Vue项目开发流程 

Vue组件库Element 

Element:是饿了么团队研发的,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。 

组件:组成网页的部件,例如 超链接、按钮、图片、表格、表单、分页条等等。

官网:https://element.eleme.cn/#/zh-CNListener

Element快速入门

1、安装ElementUI组件库 

npm install element-ui@2.15.3

在node_modules中找到element-ui 代表安装成功

2、引入ElementUI组件库

Element官网中搜

/* 引入ElementUI 组件 */
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

3、创建一个ElementView.vue 

从Element官网中找寻你所需要的

<template>

    <div>
        <!-- Ctrl+Alt+L 格式化 -->
        <!-- button -->
        <el-row>
            <el-button round>圆角按钮</el-button>
            <el-button type="primary" round>主要按钮</el-button>
            <el-button type="success" round>成功按钮</el-button>
            <el-button type="info" round>信息按钮</el-button>
            <el-button type="warning" round>警告按钮</el-button>
            <el-button type="danger" round>危险按钮</el-button>
        </el-row>
    </div>

</template>

<script>
export default {
    
}
</script>

<style>

</style>

将ElementView导入到App.View中

<template>
  <div>
    <element-view></element-view>
  </div>
</template>


<script>
import ElementView from './views/element/ElementView.vue'
export default {
  components: { ElementView },
  
}
</script>
<style>

</style>

重新启动

<template>
    <div>
        <!-- button 按钮 -->
        <el-row>
            <el-button round>圆角按钮</el-button>
            <el-button type="primary" round>主要按钮</el-button>
            <el-button type="success" round>成功按钮</el-button>
            <el-button type="info" round>信息按钮</el-button>
            <el-button type="warning" round>警告按钮</el-button>
            <el-button type="danger" round>危险按钮</el-button>
        </el-row>
        <br><br>
        <!-- Table表格 v-bind:data  -->
        <el-table :data="tableData" border style="width: 100%">
            <el-table-column prop="date" label="日期" width="180">
            </el-table-column>
            <el-table-column prop="name" label="姓名" width="180">
            </el-table-column>
            <el-table-column prop="address" label="地址">
            </el-table-column>
        </el-table>
        <br><br>
        <!-- Pagination 分页 -->
        <el-pagination background layout="sizes,prev, pager, next,jumper,total" @size-change="handleSizeChange"
            @current-change="handleCurrentChange" :total="1000">
        </el-pagination>
        <br><br>
        <!-- Dialog对话框:在保留当前页面状态的情况下,告知用户并承担相关操作 -->
        <!-- Table -->
        <el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button>
        <el-dialog title="收货地址" :visible.sync="dialogTableVisible">
            <el-table :data="gridData">
                <el-table-column property="date" label="日期" width="150"></el-table-column>
                <el-table-column property="name" label="姓名" width="200"></el-table-column>
                <el-table-column property="address" label="地址" width="300"></el-table-column>
            </el-table>
        </el-dialog>

        <!-- From 表单:由输入框、单选框、多选框等控件组成,用以收集、校验、提交数据 -->
        <!-- Dialog对话框-From表单 -->
        <el-button type="text" @click="dialogFromVisible = true">打开嵌套From的 Dialog</el-button>
        <el-dialog title="From表单" :visible.sync="dialogFromVisible">
            <el-form ref="form" :model="form" label-width="80px">
                <el-form-item label="活动名称">
                    <el-input v-model="form.name"></el-input>
                </el-form-item>
                <el-form-item label="活动区域">
                    <el-select v-model="form.region" placeholder="请选择活动区域">
                        <el-option label="区域一" value="shanghai"></el-option>
                        <el-option label="区域二" value="beijing"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="活动时间">
                    <el-col :span="11">
                        <el-date-picker type="date" placeholder="选择日期" v-model="form.date1"
                            style="width: 100%;"></el-date-picker>
                    </el-col>
                    <el-col class="line" :span="2">-</el-col>
                    <el-col :span="11">
                        <el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker>
                    </el-col>
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="onSubmit">提交</el-button>
                    <el-button>取消</el-button>
                </el-form-item>
            </el-form>
        </el-dialog>
    </div>
</template>

<script>
export default {
    data() {
        return {
            form: {
          name: '',
          region: '',
          date1: '',
          date2: ''
        },

            gridData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }],
        dialogTableVisible: false,
        dialogFromVisible:false,
            tableData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }]
        }
    },
    methods: {
        handleSizeChange:function(val)
        {
              alert("每页记录数变化:"+val)
        },
        handleCurrentChange:function(val)
        {
              alert("页码发送变化:"+val)
        },

        onSubmit:function()
        {
         alert(JSON.stringify(this.form))
        },



        
    },
}
</script>

<style>

</style>
<template>
    <div>
        <!-- button 按钮 -->
        <el-row>
            <el-button round>圆角按钮</el-button>
            <el-button type="primary" round>主要按钮</el-button>
            <el-button type="success" round>成功按钮</el-button>
            <el-button type="info" round>信息按钮</el-button>
            <el-button type="warning" round>警告按钮</el-button>
            <el-button type="danger" round>危险按钮</el-button>
        </el-row>
        <br><br>
        <!-- Table表格 -->
        <el-table :data="tableData" border style="width: 100%">
            <el-table-column prop="date" label="日期" width="180">
            </el-table-column>
            <el-table-column prop="name" label="姓名" width="180">
            </el-table-column>
            <el-table-column prop="address" label="地址">
            </el-table-column>
        </el-table>
        <br><br>
        <!-- Pagination 分页 -->
        <!-- background	是否为分页按钮添加背景色
             layout	组件布局,子组件名用逗号分隔 
             sizes:每页展示多少条
             prev:< 
             pager:展示每一页的页码
             next:>
             Events:
                   size-change	pageSize 改变时会触发   每页条数
                   current-change	currentPage 改变时会触发	当前页
        -->
        <el-pagination background layout="sizes,prev, pager, next,jumper,total" @size-change="handleSizeChange"
            @current-change="handleCurrentChange" :total="1000">
        </el-pagination>
        <br><br>
        <!-- Dialog对话框:在保留当前页面状态的情况下,告知用户并承担相关操作 -->
        <!-- Table -->
        <el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button>
        <el-dialog title="收货地址" :visible.sync="dialogTableVisible">
            <el-table :data="gridData">
                <el-table-column property="date" label="日期" width="150"></el-table-column>
                <el-table-column property="name" label="姓名" width="200"></el-table-column>
                <el-table-column property="address" label="地址" width="300"></el-table-column>
            </el-table>
        </el-dialog>

        <!-- From 表单:由输入框、单选框、多选框等控件组成,用以收集、校验、提交数据 -->
        <!-- Dialog对话框-From表单 -->
        <el-button type="text" @click="dialogFromVisible = true">打开嵌套From的 Dialog</el-button>
        <el-dialog title="From表单" :visible.sync="dialogFromVisible">
            <el-form ref="form" :model="form" label-width="80px">
                <el-form-item label="活动名称">
                    <el-input v-model="form.name"></el-input>
                </el-form-item>
                <el-form-item label="活动区域">
                    <el-select v-model="form.region" placeholder="请选择活动区域">
                        <el-option label="区域一" value="shanghai"></el-option>
                        <el-option label="区域二" value="beijing"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="活动时间">
                    <el-col :span="11">
                        <el-date-picker type="date" placeholder="选择日期" v-model="form.date1"
                            style="width: 100%;"></el-date-picker>
                    </el-col>
                    <el-col class="line" :span="2">-</el-col>
                    <el-col :span="11">
                        <el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker>
                    </el-col>
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="onSubmit">提交</el-button>
                    <el-button>取消</el-button>
                </el-form-item>
            </el-form>
        </el-dialog>
    </div>
</template>

<script>
export default {
    data() {
        return {
            form: {
          name: '',
          region: '',
          date1: '',
          date2: ''
        },

            gridData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }],
        dialogTableVisible: false,
        dialogFromVisible:false,
            tableData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }]
        }
    },
    methods: {
        handleSizeChange:function(val)
        {
              alert("每页记录数变化:"+val)
        },
        handleCurrentChange:function(val)
        {
              alert("页码发送变化:"+val)
        },

        onSubmit:function()
        {
         alert(JSON.stringify(this.form))
        },



        
    },
}
</script>

<style>

</style>

 案例:

根据页面原型完成员工管理页面开发,并通过Axios完成数据异步加载。

 步骤:

     1、创建页面(总体布局),完成页面的整体布局规划

     2、布局中各个部分的组件实现

     3、列表数据的异步加载,并渲染展示

Vue项目中使用Axios:在项目目录下安装axios:npm  install axios

需要使用axios时,导入axios:import axios from 'axios'

EmpView.vue

<!-- 
     步骤:
     1、创建页面(总体布局),完成页面的整体布局规划
     2、布局中各个部分的组件实现
     3、列表数据的异步加载,并渲染展示 
-->
<template>
    <div>
        <el-container  style="height: 700px; border: 1px solid #eee">
            <el-header style="font-size:40px; background-color: rgb(238, 241, 246)">tlias 智能学习辅助系统</el-header>
            <el-container>
                <el-aside width="230px" style="border: 1px solid #eee">
                    <el-menu :default-openeds="['1', '3']">
                        <el-submenu index="1">
                            <template slot="title"><i class="el-icon-message"></i>系统信息管理</template>
                            <el-menu-item index="1-1">部门管理</el-menu-item>
                            <el-menu-item index="1-2">员工管理</el-menu-item>
                        </el-submenu>
                        </el-menu>
                </el-aside>


                <el-main>
                    <!-- 表单 -->
                    <el-form :inline="true" :model="searchForm" class="demo-form-inline">
                        <el-form-item label="姓名">
                            <el-input v-model="searchForm.name" placeholder="姓名"></el-input>
                        </el-form-item>

                        <el-form-item label="性别">
                            <el-select v-model="searchForm.gender" placeholder="性别">
                                <el-option label="男" value="1"></el-option>
                                <el-option label="女" value="2"></el-option>
                            </el-select>
                        </el-form-item>
                        
                        <el-form-item label="入职日期">
                            <!-- 日期选择器 -->
                            <el-date-picker
                                v-model="searchForm.entrydate"
                                type="daterange"
                                range-separator="至"
                                start-placeholder="开始日期"
                                end-placeholder="结束日期">
                            </el-date-picker>
                        </el-form-item>
                        
                        <el-form-item>
                            <el-button type="primary" @click="onSubmit">查询</el-button>
                        </el-form-item>
                    </el-form>

                    <!-- 表格 -->
                    <el-table :data="tableData" border>
                        <el-table-column prop="name" label="姓名" width="180"></el-table-column>
                        <el-table-column label="图像" width="180">
                            <!-- 插槽 -->
                            <template slot-scope="scope">
                                <img :src="scope.row.image" width="100px" height="70px">
                            </template>
                        </el-table-column>
                        <el-table-column label="性别" width="140">
                            <template slot-scope="scope">
                                {{scope.row.gender == 1 ? '男':'女'}}
                            </template>
                        </el-table-column>
                        <el-table-column prop="job" label="职位" width="140"></el-table-column>
                        <el-table-column prop="entrydate" label="入职日期" width="180"></el-table-column>
                        <el-table-column prop="updatetime" label="最后操作时间" width="230"></el-table-column>
                        <el-table-column label="操作" >
                            <el-button type="primary" size="mini">编辑</el-button>
                            <el-button type="danger" size="mini">删除</el-button>
                        </el-table-column>
                    </el-table>

                    <br>
                    
                    <!-- 分页条 -->
                    <!-- Pagination 分页 -->
                    <el-pagination background layout="total,sizes, prev, pager, next, jumper" 
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                    :total="1000"></el-pagination>

                </el-main>
            </el-container>
        </el-container>
    </div>
</template>

<script>
import axios from 'axios';


export default {
    data() {
        return {
            tableData: [],
            searchForm: {
               name:"",
               gender:"",
               entrydate:[]
            }
        }
    },
    methods: {
        onSubmit:function(){
            alert("查询数据");
        },
        handleSizeChange:function(val){
            alert("每页记录数变化" + val)
        },
        handleCurrentChange:function(val){
            alert("页码发生变化" + val)
        }
    },
    mounted () {
        //发送异步请求,获取数据
        axios.get("https://yapi.pro/mock/401965/user/getById").then((result) => {
            this.tableData = result.data.data;  
        });
    }
}
</script>

<style>

</style>

 Vue路由

 1、定义路由Vue-Router

在router中的index.js中输写

import Vue from 'vue'
import VueRouter from 'vue-router'



Vue.use(VueRouter)

const routes = [
  {
    path: '/emp',/* 如果你访问的路径为/emp 代表你要访问EmpView.vue 这个组件 */
    name: 'emp',
    component: () => import( '../views/tlias/EmpView.vue')
   
  },
  {
    path: '/dept',
    name: 'dept',
  
    component: () => import('../views/tlias/DeptView.vue')
  },
  {
    path:'/', /* 根路径 */
    redirect:'/dept'         /* redirect重定向的含义 访问路径为/ 时在让它访问'/dept'*/
  }
]

const router = new VueRouter({
  routes
})

export default router

 2、请求连接组件router-link

在EmpView.vue和DeptView.vue中书写

<el-menu-item index="1-1">
      <router-link to="/dept">部门管理</router-link> 
</el-menu-item>
<el-menu-item index="1-2">
      <router-link to="/emp">员工管理</router-link>
</el-menu-item>

3、Router-View 

在App.view中书写

<template>
  <div>
     <router-view></router-view>
  </div>
</template>


<script>

export default {
  components: {   },
  
}
</script>
<style>

</style>

打包部署 

打包



会出现dist目录 文件都在dist中

部署

Nginx

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,在各大型互联网公司都有非常广泛的使用。

 

可以直接在本地访问 你设置什么端口号就访问什么 

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

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

相关文章

打造一流的研发型企业--- 金发科技研发驱动力初探

2006年3月29日&#xff0c;国家发改委副主任欧新黔亲自为金发科技颁发了“中国改性塑料行业第一位”、“中国合成材料制造业十强”、“中国石油化工全行业百强”三块铜牌证书&#xff0c;金发科技终于成为名符其实的行业“老大”。公司产品销售额增长迅速&#xff0c; 2006年完…

Java健康养老智慧相伴养老护理小程序系统源码代办陪诊陪护更安心

健康养老&#xff0c;智慧相伴 —— 养老护理小程序&#xff0c;代办陪诊陪护更安心 &#x1f308;【开篇&#xff1a;智慧养老&#xff0c;新时代的温馨守护】&#x1f308; 在这个快节奏的时代&#xff0c;我们总希望能给予家人更多的关爱与陪伴&#xff0c;尤其是家中的长…

【AIGC赋能】短视频创作新纪元:一键生成,爆款不再难!

文章目录 一、AI技术的深度融入&#xff1a;从辅助到主导二、实际应用场景&#xff1a;覆盖创作全流程三、展望未来&#xff1a;AI短视频创作的无限可能 《AI短视频生成与剪辑实战108招&#xff1a;ChatGPT剪映》编辑推荐内容简介作者简介目录前言/序言内页插图 在数字化浪潮的…

IP地址是怎么实现HTTPS访问的?

首先&#xff0c;需要明确的是&#xff0c;IP地址&#xff08;Internet Protocol Address&#xff09;是互联网上设备&#xff08;如服务器、路由器等&#xff09;的唯一标识符&#xff0c;它允许数据包在网络中正确地路由和传输。然而&#xff0c;IP地址本身并不直接支持HTTPS…

cesium可不可以改变影像底图颜色,如何给地球底图影像添加一层滤镜蒙版?

废话&#xff1a;你的球是不是很丑&#xff1f;是不是没有科技感&#xff1f;是不是没有好看的影像&#xff1f; 因果&#xff1a; 因&#xff1a;客户问&#xff0c;底图可不可以改变颜色&#xff0c;想让球更漂亮一些。 答&#xff1a;可以改变影像饱和度&#xff0c;透明度…

【MATLAB源码-第164期】基于matlab的轴承故障三种谱图:细化谱,功率谱,倒谱对比分析仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 轴承故障分析是一种重要的维护和监控手段&#xff0c;能够帮助工程师及时发现和解决轴承在运行中可能遇到的各种问题。在轴承故障诊断中&#xff0c;通常会使用到三种谱图分析方法&#xff1a;细化谱&#xff08;Fine Spectr…

基于大数据的电商平台电脑销售数据分析系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 随着电子商务的蓬勃发展&#xff0c;各大电商平台积累了海量的商品数据。如何从这些数据中提取有价值的信息&#xff0c;对于商家来说至关重要。本项目利用网络爬虫技术从京东电商平台采集各类品牌…

《Linux运维总结:基于X86_64+ARM64架构CPU使用docker-compose一键离线部署consul 1.18.1容器版分布式ACL集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

纹理视图和模型视图画的不同步?

这个是什么情况&#xff0c;纹理视图和模型视图画的不同步了 这个是因为材质球没上给模型&#xff0c;材质球再拖一下给模型。

表连接查询之两个left join与递归SQL

一、如下SQL1 SELECT i.*,su1.name as createName,su2.name as updateNameFROM information ileft join sys_user su1 on su1.idi.create_idleft join sys_user su2 on su2.idi.update_id 二、分析 1、SELECT i.*,su.name as createName,sua.name as updateName FROM informati…

EPLAN2022基础教程

EPLAN2022软件介绍 EPLAN是一款专业的电气设计和绘图软件&#xff0c;它可以帮助我创建和管理电气项目&#xff0c;生成各种报表和文档&#xff0c;与其他软件和系统进行交互&#xff0c;优化工程流程和质量。与传统的CAD绘图对比&#xff0c;EPLAN更适合绘制电气原理图。 下…

【STM32】Cortex-M3的Systick定时器(实现Delay延时)

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 Systick介绍 Systick相关寄存器 控制和状态寄存器- CTRL 重装载数值寄存器- LOAD 当前值寄存器- VAL SysTick库函数 初始化 时钟源选择 SysTick中断 Delay代码 Delay.h D…

青岛实训 8月21号 day33

1.设置主从从mysql57服务器 1&#xff09;配置主数据库 [rootmsater_5 ~]# systemctl stop filewalld [rootmsater_5 ~]# setenforce 0 [rootmsater_5 ~]# systemctl disable filewalld [rootmsater_5 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.g…

[vue] index.html中获取process.env.NODE_ENV

在index中使用环境变量直接用&#xff1a;process.env 是无法获取到的 需要使用&#xff1a; <% process.env.NODE_ENV %> // 获取环境变量 index.html固定写法 参考&#xff1a; 在vue-cli创建项目中的index.html中根据环境环境变量不同埋点

vue 踩坑记录

本地开发没有cookie 解决方案 设置代理&#xff0c;并把changeOrigin设为true proxy的changeOrigin如果设置为false&#xff1a;请求头中host仍然是浏览器发送过来的host&#xff1b; 如果设置成true&#xff1a;发送请求头中host会设置成target。 允许axios请求携带cookie等凭…

TensorFlow-keras介绍(一)

目录 一.回顾神经网络 1.神经网络 2.感知机 3.神经网络原理 1.softmax回归 2.交叉熵 二.Keras介绍 1.Keras框架的特点 2.使用tf.keras进行模型构建 1.使用Sequential构建模型 2.利用keras提供的API建立较为复杂的模型 3.model的子类进行创建 都看到这里了&#xff…

软件测试最新项目合集【商城、外卖、银行、金融等等.......】

项目一&#xff1a;ShopNC商城 项目概况&#xff1a; ShopNC商城是一个电子商务B2C电商平台系统&#xff0c;功能强大&#xff0c;安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城&#xff0c;系统PC后台是基于ThinkPHP MVC构架开发的跨…

MySQL基础:索引

&#x1f48e;所属专栏&#xff1a;MySQL 1. 索引概述 MySQL中的索引是帮助MySQL高效获取数据的数据结构&#xff0c;可以极大地提高数据库的查询效率&#xff0c;减少数据库的I/O成本&#xff0c;就像书的目录一样&#xff0c;它可以帮助我们快速定位到书中的内容。 优势&…

《深入理解JAVA虚拟机(第2版)》- 第8章 - 学习笔记

第8章 虚拟机字节码执行引擎 8.1 概述 执行引擎是Java虚拟机最为核心的组成部分之一。在不同的虚拟机里面&#xff0c;执行引擎在执行Java代码的时候可能会有解释执行&#xff08;通过解释器执行&#xff09;和编译执行&#xff08;通过即时编译器生成本地代码执行&#xff0…

监控平台之nodejs模拟后端接口

github&#xff1a;可以下载进行实验 https://github.com/Mr-Shi-root/sdk-platform/tree/master 1.配置node环境&#xff0c;安装express cors body-parser babel/cors body-parser - node.js 中间件&#xff0c;用于处理 JSON, Raw, Text 和 URL 编码的数据。cookie-parse…