Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • JavaSE

  • JavaEE

  • Linux

  • MySQL

  • NoSQL

  • Python

  • Python模块

  • 机器学习

  • 设计模式

  • 传智健康

  • 畅购商城

  • 博客项目

  • JVM

  • JUC

  • Golang

  • Kubernetes

  • 硅谷课堂

    • MyBatis-Plus
    • 项目环境和开发讲师管理接口
    • 前端基础
      • ES6
        • let声明变量
        • const声明常量
        • 解构赋值
        • 模板字符串
        • 定义方法简写
        • 对象拓展运算符
        • 箭头函数
      • Vue
        • 初始Vue.js
        • Vue指令和差值表达式
        • 基本数据渲染和指令
        • 双向数据绑定
        • 事件
        • 条件渲染
        • 列表渲染
        • Vue生命周期
        • Vue组件
        • 定义组件
        • 使用组件
        • 路由
        • axios
        • 获取数据
        • 显示数据
      • Node
        • NPM
        • 使用npm管理项目
        • npm install命令的使用
      • 模块化开发
        • ES5模块化
        • ES6模块化
        • Babel转码工具
    • 搭建项目前端环境
    • 讲师管理模块整合腾讯云对象存储
    • 后台管理系统-课程分类管理模块
    • 后台管理系统-点播管理模块
    • 整合网关与实现订单和营销管理模块
    • 营销管理模块和公众号菜单管理
    • 公众号点播和直播管理
  • C

  • 源码

  • 神领物流

  • RocketMQ

  • 短链平台

  • 后端
  • 硅谷课堂
Iekr
2022-02-21
目录

前端基础

# 前端基础

# ES6

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 Jscript 和 ActionScript)

# let 声明变量

// var 声明的变量没有局部作用域
// let 声明的变量  有局部作用域
{
var a = 0
let b = 1
}
console.log(a)  // 0
console.log(b)  // ReferenceError: b is not defined

// var 可以声明多次
// let 只能声明一次
var m = 1
var m = 2
let n = 3
let n = 4
console.log(m)  // 2
console.log(n)  // Identifier 'n' has already been declared
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# const 声明常量

// 1、声明之后不允许改变    
const PI = "3.1415926"
PI = 3  // TypeError: Assignment to constant variable.

// 2、一但声明必须初始化,否则会报错
const MY_AGE  // SyntaxError: Missing initializer in const declaration
1
2
3
4
5
6

# 解构赋值

解构赋值是对赋值运算符的扩展。他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

//2、对象解构
let user = {name: 'Helen', age: 18}
// 传统
let name1 = user.name
let age1 = user.age
console.log(name1, age1)
// ES6
let { name, age } =  user//注意:结构的变量必须是user中的属性
console.log(name, age)
1
2
3
4
5
6
7
8
9

# 模板字符串

模板字符串相当于加强版的字符串,用反引号 `, 除了作为普通字符串,还可以在字符串中加入变量和表达式。

// 2、字符串插入变量和表达式。变量名写在 ${} 中,${} 中可以放入 JavaScript 表达式。
let name = "Mike"
let age = 27
let info = `My Name is ${name},I am ${age+1} years old next year.`
console.log(info)
// My Name is Mike,I am 28 years old next year.

// 3、字符串中调用函数
function f(){
    return "have fun!"
}
let string2 = `Game start,${f()}`
console.log(string2);  // Game start,have fun!
1
2
3
4
5
6
7
8
9
10
11
12
13

# 定义方法简写

// 传统
const person1 = {
    name:'zhangsan',
    sayHi:function(){
        console.log("Hi")
    }
}
person1.sayHi();//"Hi"
console.log(person1.name)//zhangsan
// ES6
const person2 = {
    sayHi(){
        console.log("Hi")
    }
}
person2.sayHi()  //"Hi"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 对象拓展运算符

拓展运算符 ... 用于取出参数对象所有可遍历属性然后拷贝到当前对象。

// 1、拷贝对象
let person1 = {name: "Amy", age: 15}
let someone = { ...person1 }
console.log(someone)  //{name: "Amy", age: 15}
1
2
3
4

# 箭头函数

// 传统
var f1 = function(a){
    return a
}
console.log(f1(1))
// ES6
var f2 = a => a
console.log(f2(1))

// 当箭头函数没有参数或者有多个参数,要用 () 括起来。
// 当箭头函数函数体有多行语句,用 {} 包裹起来,表示代码块,
// 当只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回。
var f3 = (a,b) => {
    let result = a+b
    return result
}
console.log(f3(6,2))  // 8
// 前面代码相当于:
var f4 = (a,b) => a+b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

箭头函数多用于匿名函数的定义

# Vue

官方网站 (opens new window)

# 初始 Vue.js

<!-- id标识vue作用的范围 -->
<div id="app">
    <!-- {{}} 插值表达式,绑定vue中的data数据 -->
    {{ message }}
</div>
<script src="vue.min.js"></script>
<script>
    // 创建一个vue对象
    new Vue({
        el: '#app',//绑定vue作用的范围
        data: {//定义页面中显示的模型数据
            message: 'Hello Vue!'
        }
    })
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

在 vs code 中创建代码片段:

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

注意:制作代码片段的时候,字符串中如果包含文件中复制过来的 “Tab” 键的空格,要换成 “空格键” 的空格

{
	// Place your snippets for vue here. Each snippet is defined under a snippet name and has a prefix, body and
	// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the
	// same ids are connected.
	// Example:
	// "Print to console": {
	//     "prefix": "log",
	//     "body": [
	//         "console.log('$1');",
	//         "$2"
	//     ],
	//     "description": "Log output to console"
	// }

	"Print to console": {
			"prefix": "vue",
			"body": [
					"<template>",
					"    <div class=\"$2\">$5</div>",
					"</template>",
					"",
					"<script>",
					"",
					"export default {",
                    "    name: '$1',",
					"    components: {},",
					"    data() {",
					"        return {",
					"",
					"        };",
					"    },",
					"    computed: {},",
					"    watch: {},",
                    "    props: {},",
					"    methods: {},",
					"    created() {},",
					"    mounted() {},",
					"    beforeCreate() {},",
					"    beforeMount() {},",
					"    beforeUpdate() {},",
					"    updated() {},",
					"    beforeDestroy() {},",
					"    destroyed() {},",
					"    activated() {},",
					"    }",
					"</script>",
					"<style lang='less' scoped>",
					"//@import url($3); 引入公共css类",
					"$4",
					"</style>"
			],
			"description": "Log output to console"
	}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

# Vue 指令和差值表达式

# 基本数据渲染和指令

除了使用插值表达式 {{}} 进行数据渲染,也可以使用 v-bind 指令,它的简写的形式就是一个冒号(:)

<!-- 如果要将模型数据绑定在html属性中,则使用 v-bind 指令
     此时title中显示的是模型数据
-->
<h1 v-bind:title="message">
    {{content}}
</h1>
<!-- v-bind 指令的简写形式: 冒号(:) -->
<h1 :title="message">
    {{content}}
</h1>

data: {
    content: '我是标题',
    message: '页面加载于 ' + new Date().toLocaleString()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 双向数据绑定

双向数据绑定和单向数据绑定:使用 v-model 进行双向数据绑定

<!-- v-bind:value只能进行单向的数据渲染 -->
<input type="text" v-bind:value="searchMap.keyWord">
<!-- v-model 可以进行双向的数据绑定  -->
<input type="text" v-model="searchMap.keyWord">
<p>您要查询的是:{{searchMap.keyWord}}</p>

data: {
    searchMap:{
        keyWord: '测试测试'
    }
}
1
2
3
4
5
6
7
8
9
10
11

# 事件

使用 v-on 进行数件处理,v-on:click 表示处理鼠标点击事件,事件调用的方法定义在 vue 对象声明的 methods 节点中

<!-- v-on 指令绑定事件,click指定绑定的事件类型,事件发生时调用vue中methods节点中定义的方法 -->
<button v-on:click="search()">查询</button>

<!-- v-on 指令的简写形式 @ -->
<button @click="search()">查询</button>

data: {

},
methods:{
    search(){
        console.log('search')
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 条件渲染

v-if:条件指令

<input type="checkbox" v-model="ok">同意许可协议
<!-- v:if条件指令:还有v-else、v-else-if 切换开销大 -->
<h1 v-if="ok">if:Lorem ipsum dolor sit amet.</h1>
<h1 v-else>no</h1>

data: {
    ok: false
}
1
2
3
4
5
6
7
8

# 列表渲染

v-for:列表循环指令

<!-- 2、遍历数据列表 -->
<table border="1">
    <!-- <tr v-for="item in userList"></tr> -->
    <tr v-for="(item, index) in userList">
        <td>{{index}}</td>
        <td>{{item.id}}</td>
        <td>{{item.username}}</td>
    </tr>
</table>

data: {
    userList: [
        { id: 1, username: 'helen'},
        { id: 2, username: 'peter'},
        { id: 3, username: 'andy'}
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# Vue 生命周期

image-20220221150902189

<h3 id="h3">{{ message }}</h3>

data: {
    message: '床前明月光'
},
created() { // 在渲染之前执行
	console.log("created....")
},
mounted() { // 在渲染之后执行
    console.log("mounted....") 
},
methods: {

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# Vue 组件

组件(Component)是 Vue.js 最强大的功能之一。

组件可以扩展 HTML 元素,封装可重用的代码。组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树

image-20220629175145364

# 定义组件

var app = new Vue({
    el: '#app',
    // 定义局部组件,这里可以定义多个局部组件
    components: {
        //组件的名字
        'Navbar': {
            //组件的内容
            template: '<ul><li>首页</li><li>学员管理</li></ul>'
        }
    }
})
1
2
3
4
5
6
7
8
9
10
11

# 使用组件

<div id="app">
    <Navbar></Navbar>
</div>
1
2
3

# 路由

Vue.js 路由允许我们通过不同的 URL 访问不同的内容。

通过 Vue.js 可以实现多视图的单页 Web 应用(single page web application,SPA)。

Vue.js 路由需要载入 vue-router 库

引入 js

<script src="vue.min.js"></script>
<script src="vue-router.min.js"></script>
1
2

编写 html

<div id="app">
    <h1>Hello App!</h1>
    <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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

编写 js

<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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# axios

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

  • 在浏览器中可以帮助我们完成 ajax 请求的发送
  • 在 node.js 中可以向远程接口发送请求

# 获取数据

<script src="vue.min.js"></script>
<script src="axios.min.js"></script>

var app = new Vue({
    el: '#app',
    data: {
        memberList: []//数组
    },
    created() {
        this.getList()
    },
    methods: {
        getList(id) {
            //vm = this
            axios.get('data.json')
            .then(response => {
                console.log(response)
                this.memberList = response.data.data.items
            })
            .catch(error => {
                console.log(error)
            })
        }
    }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 显示数据

<div id="app">
    <table border="1">
        <tr>
            <td>id</td>
            <td>姓名</td>
        </tr>
        <tr v-for="item in memberList">
            <td>{{item.memberId}}</td>
            <td>{{item.nickname}}</td>
        </td>
    </tr>
</table>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13

# Node

Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,性能非常好。

官网 (opens new window)

# NPM

NPM 全称 Node Package Manager,是 Node.js 包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的;也是 Node.js 的包管理工具,相当于前端的 Maven 。

Node.js 默认安装的 npm 包和工具的位置:Node.js 目录 \node_modules

npm -v
1

# 使用 npm 管理项目

1. 创建项目文件夹

2. 项目初始化

#建立一个空文件夹,在命令提示符进入该文件夹  执行命令初始化
npm init
#按照提示输入相关信息,如果是用默认值则直接回车即可。
#name: 项目名称
#version: 项目版本号
#description: 项目描述
#keywords: {Array}关键词,便于用户搜索到我们的项目
#最后会生成package.json文件,这个是包的配置文件,相当于maven的pom.xml
#我们之后也可以根据需要进行修改。

#如果想直接生成 package.json 文件,那么可以使用命令
npm init -y
1
2
3
4
5
6
7
8
9
10
11
12

2.3 修改 npm 镜像

NPM 官方的管理的包都是从 http://npmjs.com 下载的,但是这个网站在国内速度很慢。

这里推荐使用淘宝 NPM 镜像 http://npm.taobao.org/ ,淘宝 NPM 镜像是一个完整 npmjs.com 镜像,同步频率目前为 10 分钟一次,以保证尽量与官方服务同步。

#经过下面的配置,以后所有的 npm install 都会经过淘宝的镜像地址下载
npm config set registry https://registry.npm.taobao.org 
#查看npm配置信息
npm config list
1
2
3
4

# npm install 命令的使用

#使用 npm install 安装依赖包的最新版,
#模块安装的位置:项目目录\node_modules
#安装会自动在项目目录下添加 package-lock.json文件,这个文件帮助锁定安装包的版本
#同时package.json 文件中,依赖包会被添加到dependencies节点下,类似maven中的 <dependencies>
npm install jquery
#npm管理的项目在备份和传输的时候一般不携带node_modules文件夹
npm install #根据package.json中的配置下载依赖,初始化项目
#如果安装时想指定特定的版本
npm install [email protected]
# 局部安装
#devDependencies节点:开发时的依赖包,项目打包到生产环境的时候不包含的依赖
#使用 -D参数将依赖添加到devDependencies节点
npm install --save-dev eslint
#或
npm install -D eslint
#全局安装
#Node.js全局安装的npm包和工具的位置:用户目录\AppData\Roaming\npm\node_modules
#一些命令行工具常使用全局安装的方式
npm install -g webpack
            --global
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

其他命令

#更新包(更新到最新版本)
npm update 包名
#全局更新
npm update -g 包名
#卸载包
npm uninstall 包名
#全局卸载
npm uninstall -g 包名
1
2
3
4
5
6
7
8

# 模块化开发

模块化规范:

  • CommonJS 模块化规范
  • ES6 模块化规范

# ES5 模块化

每个文件就是一个模块,有自己作用域。在一个文件里定义的变量、函数、类,都是私有的,对其他文件不可见。

CommonJS 使用 exports 和 require 来导出、导入模块。

导出模块

编写 js

// 定义成员:
const sum = function(a,b){
    return parseInt(a) + parseInt(b)
}
const subtract = function(a,b){
    return parseInt(a) - parseInt(b)
}
1
2
3
4
5
6
7

导出模块中的成员

// 导出成员:
module.exports = {
    sum: sum,
    subtract: subtract
}

//简写
module.exports = {
    sum,
    subtract
}
1
2
3
4
5
6
7
8
9
10
11

导入模块

//引入模块,注意:当前路径必须写 ./
const m = require('./四则运算.js')
console.log(m)
const result1 = m.sum(1, 2)
const result2 = m.subtract(1, 2)
console.log(result1, result2)
1
2
3
4
5
6

# ES6 模块化

ES6 使用 export 和 import 来导出、导入模块。

导出模块

//方式一
export function getList() {
    console.log('获取数据列表')
}
export function save() {
    console.log('保存数据')
}

//方式二
export default {
    getList() {
        console.log('获取数据列表2')
    },
    save() {
        console.log('保存数据2')
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

导入模块

//只取需要的方法即可,多个方法用逗号分隔
import { getList, save } from "./userApi.js"
getList()
save()

//方式二
import user from "./userApi2.js"
user.getList()
user.save()
1
2
3
4
5
6
7
8
9

注意:这时程序无法运行,因为 ES6 的模块化无法在 Node.js 中执行,需要用 Babel 编辑成 ES5 后再执行。

# Babel 转码工具

Babel 是一个广泛使用的转码器,可以将 ES6 代码转为 ES5 代码,从而在现有环境执行执行

安装命令行转码工具

Babel 提供 babel-cli 工具,用于命令行转码。它的安装命令如下:

npm install --global babel-cli
#查看是否安装成功
babel --version
1
2
3

配置.babelrc

Babel 的配置文件是.babelrc,存放在项目的根目录下,该文件用来设置转码规则和插件,presets 字段设定转码规则,将 es2015 规则加入 .babelrc:

{
    "presets": ["es2015"],
    "plugins": []
}
1
2
3
4

在项目中安装转码器

npm install --save-dev babel-preset-es2015
1

转码

# 整个目录转码
mkdir dist1
# --out-dir 或 -d 参数指定输出目录
babel src -d dist1
1
2
3
4
编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
项目环境和开发讲师管理接口
搭建项目前端环境

← 项目环境和开发讲师管理接口 搭建项目前端环境→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式