实战项目-05(前端(es6,vue,axios))

项目前端需求

下载vscode

  1. 下载地址:https://code.visualstudio.com/
  2. 安装之后
  3. 安装插件
    image
  4. 前端的代码都在工作区中
    1. 在本地新建一个空文件夹
    2. 使用vscode打开文件夹
    3. 将文件夹保存成工作区
    4. ok
  5. 写好页面之后用一下的打开,就类似于tomcat
    image

ECMAScript6

1. 简介

简称es6是js语言的下一代标准,在2015年6月发布

2. 基本语法

Es标准中不包含DOM BOM的定义,只涵盖基本的数据类型,关键字,语句,运算符,内建对象,内建函数等通用语法.

  1. let声明变量
    创建let.heml
<!-- js代码需要写在script标签中 -->
<script>
    //es6中如何定义变量,定义变量的特点(var)
    //js中这样定义  var a = 1;
    //es6中这样定义 let a = 10;

    //1. 创建代码块然后在代码块外面输出
    {
        var a = 10;
        let b = 20;//在代码块中定义了只能在代码块中使用
    }
    //2. 输出
    console.log(a)
    console.log(b)  //Uncaught ReferenceError: b is not defined


  var a = 1;
  var a = 2;
  //let 不能定义多次相同名字变量
  let m = 10;
  let m = 20;

	console.log(a)
	console.log(m)//Uncaught SyntaxError: Identifier 'm' has already been declared
	//3. var可以声明多次,let只能声明一次
</script>
  1. 声明常量
    创建const.html
<script>
    //定义常量
    const PI = "3.14"
    PI = 3; //常量值一旦定义,就不能改变了(Uncaught TypeError: Assignment to constant variable.)

    //定义常量必须初始化(赋值)
    const AA //Missing initializer in const declaration

</script>
  1. 解构赋值
    分为数组和对象解构
//数组解构
//传统写法
    let a=1,b=2,c=3
    console.log(a,b,c)
//ES6写法
    let [x,y,z]=[10,20,30]
    console.log(x,y,z)


//对象解构
    let user = {"name":"lucy","age":20}
//传统从里面获取值
    let name1 = user.name
    let age1 = user.age
    console.log(name1+"====="+age1)
//ES6写法获取对象中的值
    let{name , age}=user
    console.log(name+"******"+age)
  1. 模板字符串
    创建模板字符串.html
    模板字符串相当于加强版的字符串,用反引号 1左边的那个,除了作为普通字符串,还可以用来定义多行字符串,还可
    以在字符串中加入变量和表达式
<script>
    //1.使用这个符号可以实现换行的效果`
    let str1 = `hello,
    es6 qwq `
    console.log(str1)

    //2.在`的符号中可以使用表达式来获取变量的值
    let name = "Mike"
    let age = 20

    let str2 = `hello,${name},age is${age+1}`
    console.log(str2)

    //3.在`符号中可以调用方法
    function f1(){
        return "hello f1"
    }

    let str3 = `qwq,${f1()}`
    console.log(str3)
</script>
  1. 声明对象的简写
    创建声明对象.html
<script>
    const age = 12 
    const name = "lucy"
//使用传统方式来定义对象
    const p1 = {name:name,age:age}
    console.log(p1)
//es6来定义
    const p2 = {name,age}
    console.log(p2)
</script>
  1. 定义方法简写
    创建定义方法简写.html
<script>
    //传统的定义方法的方式
    const person1 = {           //相当于java中的类
        sayHi:function(){       //相当于java中的方法
            console.log("Hi")
        }
    }
    //调用
    person1.sayHi()             //对象调用方法

    //ES6写法
    const person2 = {
        sayHello(){
            console.log("hello")
        }
    }
    //调用
    person2.sayHello()

</script>
  1. 对象扩展运算符
    创建对象扩展运算符.html
    扩展运算符(...)用于取出参数对象所有可遍历属性然后copy到当前的对象
<script>
    //对象的复制(原来需要解构出对象中的属性然后再复制给新的对象)
    let person1 = {name:"Amy",age:20}
    let person2 = {...person1}
    console.log(person2)



    //对象的合并(一个有age 一个有name ,两个对象合并成一个)
    let name = {name:"sli"}
    let age = {age:20}
    let p2 = {...name,...age}
    console.log(p2)
</script>
  1. 箭头函数
    创建箭头函数.html
    箭头函数提供了一种更加简洁的函数书写方式,基本的语法是

参数 => 函数体

<script>

    //箭头函数是提供了一种更加简介的函数书写方式,语法为:参数(function()括号中的部分(也就是需要传入的参数))=>函数体(返回值部分)
    //传统的写法
    var f1 = function(a){
        return a+1
    }
    console.log(f1(2))
    //es6
    //第一个a对应函数体(function(a))
    //第二个a对应返回值部分(return a)
    var f2 = a => a+1
    console.log(f2(3))

    //2.复杂的方法
    var f3 = function(a,b){
        let result = a + b
        return result
    }
    console.log(f3(1,3))
    //使用箭头函数简化
    var f4 = (a,b) => a+b
    console.log(f4(3,4))

</script>

Vue

Vue是什么

是一套用于构建用户界面的渐进式框架
核心库只关注视图层,便于与第三方库或既有项目整合
官方网站:https://cn.vuejs.org/

初始化Vue.js

创建01-vue入门.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>Document</title>
</head>
<body>
    <!-- 先注册组件,然后使用 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>


    <div id="app">
        <!-- 差值表达式 -->
        {{message}}
    </div>

    <script>
        //创建一个vue对象
        new Vue({
            el: '#app',//绑定vue的作用范围,需要对应的id
            data: {//定义页面中显示的模型数据
                message: 'hello vue'
            }
        })
    </script>

</body>
</html>

这就是声明式渲染:Vue.js的核心就是一个允许采用简介的模板语法来声明式地将数据渲染进DOM的系统
这里的思想就是美欧繁琐的DOM操作,例如jQuery中,我们需要找到div节点,获取到dom对象,然后进行一系列的节点操作

在vscode中创建代码片段,方便以后的开发

文件 => 首选项 => 用户代码片段 => 新建全局代码片段/或文件夹代码片段:vue-html.code-snippets

{ 
	"vue htm": {
	   "scope": "html",
	   "prefix": "vuehtml",
	   "body": [
			 "<!DOCTYPE html>",
			 "<html lang=\"en\">",
			 "",
			 "<head>",
			 "    <meta charset=\"UTF-8\">",
			 "    <meta name=\"viewport\" content=\"width=device-width, initial,scale=1.0\">",
			 "    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">",
			 "    <title>Document</title>",
			 "</head>",
			 "",
			 "<body>",
			 "<script src=\"https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js\"></script>",
			 "    <div id=\"app\">",
			 "",
			 "    </div>",
			 "    <script>",
			 "        new Vue({",
			 "            el: '#app',",
			 "            data: {",
			 "               $1", 
			 "             }",
			 "         })",
			 "    </script>",
			 "</body>",
			 "",
			 "  </html>",
			 ],
			 "description": "my vue template in html"
	}
}

基本语法

  1. v-bind
    创建03-指令v-bind.html
    v-bind特性被称为指令,指令带有前缀v-
    除了使用插值表达式{{}}进行数据渲染,也可以使用v-bind指令,它的简写就是一个:

<!-- v-bind单向数据绑定,指令一般用于标签属性里面获取值 -->
        <h1 v-bind:title="message">
            {{content}}
        </h1>

data: {
            content: '我是标题',
            message: '页面加载于' + new Date().toLocaleString()//鼠标停留在标题上就可以看到信息了
       }
  1. v-model双向绑定
    创建04-v-model.html
    数据双向绑定使用v-model
  <div id="app">
        <input type="text" v-bind:value="searchMap.keyWord"/>
        <!-- 双向绑定,一个变另一个也会改变 -->
        <input type="text" v-model="searchMap.keyWord"/>
        <p>{{searchMap.keyWord}}</p>
    </div>

data: {
           searchMap:{
                keyWord: 'sli'
           }
       }

测试之后发现修改里面v-model中的文本输入框变动,p标签的内容也会变动

  1. 事件
    创建05-vue事件操作.html
    需求:点击查询按钮之后,控制台输出文本
  <div id="app">
        <!-- vue绑定事件(例如点击按钮触发一些事件,就是方法) -->
        <button v-on:click="search()">查询</button>
        <button @click="f1()">查询</button>
    </div>

data: {
                searchMap:{
                   keyWord: 'sli'
             },
             result:{}
             },
             methods:{
                 search(){
                     console.log('serch.....')
                 },
                 f1(){
                     console.log('f1....')
                 }
        }

测试点击第一个按钮之后控制台输出如下,第二个也如下
image

  1. 修饰符
    创建06-vue修饰符.html
    修饰符(Modifiers)是以.指明的特殊后缀,用于之处一个指令应该以特殊的方式绑定.例如:.prevent修饰符告诉v-on指令对于触发的事件调用event.preventdefault()及阻止事件原本的默认行为
<form action="save" v-on:submit.prevent="onSubmit">
            <input type="text" name="name" v-model="user.username"></input>
            <button type="submit">保存</button>
</form>

data: {
             user:{}
             },
             methods:{
                 onSubmit(){
                    if(this.user.username){
                        console.log('提交表单')
                    } else{
                        alert('请输入用户名')
                    }
              }
       }

测试之后发现控制台输出提交表单,成功阻止了form的默认行为

  1. 条件渲染
    创建07-vue-if.html
<div id="app">
        <input type="checkbox" v-model="ok">是否同意</input>
        <h1 v-if="ok">sli</h1>
        <h1 v-else>qwq</h1>
</div>

data: {
               ok:false
      }

image

  1. 列表渲染
    创建08-v-for.html
<table>
        <!-- 下面的意思是遍历userList这个数组,in是固定的,user是得到的对象名字随便起(user就相当于对象,user.id就相当于对象.属性) -->
            <tr v-for="user in userList">
                <td>{{user.id}}</td>
                <td>{{user.username}}</td>
                <td>{{user.age}}</td>

            </tr>
</table>

data: {
               userList:[
                   {id:1,username:'helen',age:18},
                   {id:2,username:'peter',age:10},
                   {id:3,username:'andy',age:12},
               ]
       }

组件

组件(Component)是Vue.js最强大的功能之一
可以扩展html元素,封装可重用的代码
组件系统让我们可以用独立可复用的小组件来构建大型的应用,任意的类型的应用的界面都可以抽象出去为一个组件树
image

  1. 局部组件
    创建09-vue组件.html
<!--使用组件-->
<div id="app">
        <Navbar></Navbar>
</div>

new Vue({
            el: '#app',
            //定义vue使用的组件
            components: {
                //组件内容
               'Navbar': {
                   //组件内容
                   template: '<ul><li>首页</li><li>学院管理</li></ul>'
               }
             }
         })

测试结果
image

  1. 全局组件
    创建Navbar.js里面定义全局组件
//定义全局组件
Vue.component('Navbar',{
    template:'<ul><li>首页</li><li>学院管理</li><li>讲师管理</li></ul>'
})

创建10-vue全局组件.html在里面加入js引用,然后使用组件

<script src="components/Navbar.js"></script>
    <div id="app">
        <Navbar></Navbar>
    </div>
  1. 实例的生命周期
    image
    作为后端开发只需要知道created()页面渲染之前和mounted()页面渲染后
    debugger是前端的断点,测试的时候启动页面然后打开控制台刷新页面只有可以看到
    image
<div id="app">
        hello
    </div>

 data: {
             },
             created(){
                 debugger
                //页面渲染之前执行
                console.log('created...')
             },
             mounted(){
                debugger
                //页面渲染之后执行
                console.log('mounted...')
              }
  1. 路由
    Vue.js路由允许我们通过不同的Url访问不同的内容
    可以实现多视图单页web应用
    需要载入vue-router库
    创建12-vue路由.html并引入js文件
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial,scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script src="vue-router.min.js"></script>
    <div id="app">
        <p> <!-- 使用 router-link 组件来导航. -->
            <!-- 通过传入 `to` 属性指定链接. -->
            <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
            <router-link to="/">首页</router-link> 
            <router-link to="/student">会员管理</router-link> 
            <router-link to="/teacher">讲师管理</router-link>
             </p>
             <!-- 路由出口 -->
             <!-- 路由匹配到的组件将渲染在这里 -->
             <router-view></router-view>
    </div>
    <script>

        // 1. 定义(路由)组件。
        // 可以从其他文件 import 进来
        const Welcome = { template: '<div>欢迎</div>' }
        const Student = { template: '<div>student list</div>' }
        const Teacher = { template: '<div>teacher list</div>' }
        // 2. 定义路由
        // 每个路由应该映射一个组件。
         const routes = [
         { path: '/', redirect: '/welcome' }, //设置默认指向的路径
         { path: '/welcome', component: Welcome },
         { path: '/student', component: Student },
         { path: '/teacher', component: Teacher }
         ]

         // 3. 创建 router 实例,然后传 `routes` 配置
         const router = new VueRouter({
         routes // (缩写)相当于 routes: routes
         })
     
         // 4. 创建和挂载根实例。
         // 从而让整个应用都有路由功能
         const app = new Vue({
         el: '#app',
         router
         })
     
         // 现在,应用已经启动了!
    </script>
  </body>
</html>

启动测试


axios

是一个独立的vue项目,基于promise用于浏览器和node.js的http客户端

  • 在浏览器中可以帮助我们完成ajax请求
  • 在node.js中可以向远程接口发送请求
    也就是可以从后端的接口得到json数据
  1. 引入以下的
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script src="axios.min.js"></script>
  1. 模拟后端的数据
    创建data.json
{
    "success": true,
    "code": 20000,
    "message":"成功",
    "data":{
        "items":[
            {"name":"lucy","age":20},
            {"name":"mary","age":30},
            {"name":"jack","age":40}
        ]
    }
}
  1. 创建页面
<body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script src="axios.min.js"></script>
    <div id="app">
        <!-- 把userList数组中的值进行输出(使用v-for) -->
        <div v-for="user in userList">
            {{user.name}}
            {{user.age}}
        </div>

    </div>
    <script>
        new Vue({
            el: '#app',
            //固定结构
            data: {//在data中可以定义变量和初始值
                //定义变量,为空数组
                userList:[]
             },
             created(){//页面渲染之前执行
                //调用定义的方法
                this.getUserList()
             },
             methods:{//编写具体的方法
                //创建方法
                getUserList(){
                    //使用axios发送ajax请求
                    //axios.提交方式("文件路径/接口路径")
                    axios.get("data.json")
                    .then(response => {
                        //response就是请求之后返回的数据
                        //通过response获取具体的数据,赋值给定义的空数组
                        this.userList= response.data.data.items
                        console.log(this.userList)
                    }) //请求成功之后会执行then方法


                    .catch(error => {
                    }) //请求失败会执行catch方法
                }
             }
         })
    </script>
</body>

image

posted @ 2021-10-18 21:12  1_f  阅读(54)  评论(0)    收藏  举报