ES6和Vue系列
market项目的运行
目标:运行我们的前端项目
运行前端项目的的步骤:
(1)下载项目源码
比如github上面等等。
这里解压提供的ui(前端)项目到一个位置,
将项目文件夹改名为market-frontend,也放到marketproject中,便于管理。
(2)安装项目依赖
npm install
(3)启动项目
看前端项目首先看package.json,看里面的scripts(运行脚本),找到运行的脚本命令
npm run serve
运行效果:
DONE Compiled successfully in 26105ms 09:34:06
App running at:
- Local: http://localhost:8080/
- Network: http://10.25.191.44:8080/
Note that the development build is not optimized.
To create a production build, run npm run build.
(4)浏览器打开测试
http://localhost:8080/
Vue
Vue生态和架构
Vue 作为当下最为流行的前端开发框架之一,使用它可以快速构建企业级的 Web 应用,更因其出色的性能表现,使得众多互联网公司和开发人员对它格外地青睐。Vue 3.0
正式版本已上线半年有余,在 Vue 发布 3.0 之初,Vue 3.0
的周边生态,还不算健全,如路由插件 Vue-Router
、状态管理插件 Vuex
、各大组件库的 Vue 3.0
版本都还处以 beta
版本,甚至有些组件库都还没有更新,这让广大 Vue
使用者们很难去将自己的项目平稳的迁移至 Vue 3.0
。
随着时间的推移,Vue
的周边插件开始升级为正式版,几大知名的 UI
组件库也都度过的阵痛期,纷纷推出了 Vue 3.0
版本,如 Element-Plus
、Ant Design of Vue
、Vant
等等,都是业界比较知名的 UI
组件库,它们作为先驱,为 Vue
生态作出的贡献有目共睹,在此也希望大家能一起为 Vue
的生态添砖加瓦。
前后端分离:https://juejin.cn/book/6844733826191589390
认识VUE3
中文官方站:
https://cn.vuejs.org/
https://v3.cn.vuejs.org/
当前版本:v3.2.31
dom和虚拟dom区别:
库和框架的区别:框架是半成品,库是单一功能的成品。框架一般是由多个库组成的。
VUE是一套用于构建用户界面的渐进式框架。
渐进式:从简单到复杂,灵活性强。
VUE两大核心:
- 响应式的数据绑定:数据双向绑定,无需关心dom操作,只专心数据操作。
- 可组合的视图组件:按照功能将视图切分为若干基础单元,组件可以一级一级组合整个应用形成倒置组件树,可维护,可重用,可测试。(可复用的可以做成组件)
两套Api风格:
Vue 的组件可以按两种不同的风格书写:选项式 API 和组合式 API。
选项式 API (Options API)
<script>
export default {
// data() 返回的属性将会成为响应式的状态
// 并且暴露在 `this` 上
data() {
return {
count: 0
}
},
// methods 是一些用来更改状态与触发更新的函数
// 它们可以在模板中作为事件处理器绑定
methods: {
increment() {
this.count++
}
},
// 生命周期钩子会在组件生命周期的各个不同阶段被调用
// 例如这个函数就会在组件挂载完成后被调用
mounted() {
console.log(`The initial count is ${this.count}.`)
}
}
</script>
<template>
<button @click="increment">Count is: {{ count }}</button>
</template>
组合式 API (Composition API):
<script setup>
import { ref, onMounted } from 'vue'
// 响应式状态
const count = ref(0)
// 用来修改状态、触发更新的函数
function increment() {
count.value++
}
// 生命周期钩子
onMounted(() => {
console.log(`The initial count is ${count.value}.`)
})
</script>
<template>
<button @click="increment">Count is: {{ count }}</button>
</template>
第一个vue的项目的创建和项目结构
第一步:初始化一个vue的项目:
找一个文件夹,用来存放项目文件
第二步:安装依赖,运行项目
cd vuedemo
# 安装依赖模块
npm install
#运行
npm run dev
第三步:用vsc打开项目查看项目结构
后面写代码主要在src下面写。
vue脚手架项目的程序执行流程
现在的项目是vue(前端框架)提供的一个脚手架的项目,你基于这个脚手架进行开发。
程序访问的入口是:index.html
main.js
app.vue:可以认为是第一个主页面
页面的基本组成部分:
<!-- 视图模版:类似于html效果,展示用的 :必须有的-->
<template>
hello
</template>
<!-- vue写js的脚本的地方,这里是组合式api :和模版必须有一个-->
<script setup>
</script>
<!-- 页面样式: scoped表示定义的样式只适用于当前页面;如果不加scoped样式全局有效。可选的可选的-->
<style scoped>
</style>
父组件调用子组件的方式:
步骤:
第一步:引入组件
第1.5步(如果不用组合式api,用选项api):还需要需要定义组件
第二步:页面上使用组件标签就行了。
下面我们自定义一个子组件:
components/MyHelloWorld.vue
<!-- 视图模版:类似于html效果,展示用的 :必须有的-->
<template>
我是子组件
</template>
<!-- vue写js的脚本的地方,这里是组合式api :可选-->
<script setup>
</script>
<!-- 页面样式: scoped表示定义的样式只适用于当前页面;如果不加scoped样式全局有效。可选的可选的-->
<style scoped>
</style>
我们在MyApp.vue里面引入子组件:
<!-- 视图模版:类似于html效果,展示用的 :必须有的-->
<template>
hello
<div>
<MyHelloWorld/>
<my-helloWorld/>
</div>
</template>
<!-- vue写js的脚本的地方,这里是组合式api :可选-->
<script setup>
// 引入子组件
import MyHelloWorld from './components/MyHelloWorld.vue'
</script>
<!-- 页面样式: scoped表示定义的样式只适用于当前页面;如果不加scoped样式全局有效。可选的可选的-->
<style scoped>
</style>
我们在MyApp.vue里面引入子组件:
<!-- 视图模版:类似于html效果,展示用的 :必须有的-->
<template>
hello
<div>
<MyHelloWorld/>
<my-helloWorld/>
</div>
</template>
<!-- vue写js的脚本的地方,这里是组合式api :可选-->
<script setup>
// 引入子组件
import MyHelloWorld from './components/MyHelloWorld.vue'
</script>
<!-- 页面样式: scoped表示定义的样式只适用于当前页面;如果不加scoped样式全局有效。可选的可选的-->
<style scoped>
</style>
Vue的双向数据绑定(响应式)-选项式api
需求:在页面有输入框,还有展示数据的,还有按钮点击改变。。。
为了更好的测试,可以删除main.js中加载的全局样式。
// import './assets/main.css'
新建一个组件:
src\components\Demo1.vue
<template>
<!-- 插值表达式,有点bug -->
<!-- 数据绑定 -->
{{ msg }}
<button @click="changeMsg()">改变内容</button>
<!-- 数据模型绑定指令,只针对表单元素 -->
<input v-model="msg"/>
<!-- 展示数据可以使用绑定文本指令 -->
<div v-text="msg"></div>
<!-- 展示html -->
<div v-html="msg"></div>
</template>
<script>
export default {
// data() 返回的属性将会成为响应式的状态
// 并且暴露在 `this` 上
data() {
return {
// 定义的双向数据绑定的办理
msg: '我是demo1'
}
},
// methods 是一些用来更改状态与触发更新的函数
// 它们可以在模板中作为事件处理器绑定
methods: {
changeMsg() {
this.msg='我是改变了的demo1';
}
},
// 生命周期钩子会在组件生命周期的各个不同阶段被调用
// 例如这个函数就会在组件挂载完成后被调用
mounted() {
console.log(`The initial count is.`)
}
}
</script>
<style scoped>
</style>
在MyApp.vue中引入组件:
<!-- 视图模版:类似于html效果,展示用的 :必须有的-->
<template>
hello
<div>
<MyHelloWorld/>
<my-helloWorld/>
</div>
<div>
<Demo1/>
</div>
</template>
<!-- vue写js的脚本的地方,这里是组合式api :和模版必须有一个-->
<script setup>
// 引入子组件
import MyHelloWorld from './components/MyHelloWorld.vue';
import Demo1 from './components/Demo1.vue';
</script>
<!-- 页面样式: scoped表示定义的样式只适用于当前页面;如果不加scoped样式全局有效。可选的可选的-->
<style scoped>
</style>
将下述代码添加到html文件
// 子组件 Demo1
const Demo1 = {
template: `
<div>
<!-- 插值表达式,有点bug -->
<!-- 数据绑定 -->
{{ msg }}
<button @click="changeMsg()">改变内容</button>
<!-- 数据模型绑定指令,只针对表单元素 -->
<input v-model="msg"/>
<!-- 展示数据可以使用绑定文本指令 -->
<div v-text="msg"></div>
<!-- 展示html -->
<div v-html="msg"></div>
</div>
`,
data() {
return {
msg: '初始内容'
};
},
methods: {
changeMsg() {
this.msg = '改变后的内容';
}
}
};
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue App</title>
</head>
<body>
<div id="app">
<my-hello-world>
<template #default>
<my-component></my-component>
</template>
</my-hello-world>
<demo1></demo1> <!-- 添加了一个使用 Demo1 组件的例子 -->
</div>
<script src="https://unpkg.com/vue@3.2.6/dist/vue.global.js"></script>
<script>
// 子组件 MyHelloWorld
const MyHelloWorld = {
template: `
<div>
<h1>Hello World</h1>
<slot></slot>
</div>
`
};
// 子组件 MyComponent
const MyComponent = {
template: `
<div>
我是子组件
</div>
`
};
// 子组件 Demo1
const Demo1 = {
template: `
<div>
<!-- 插值表达式,有点bug -->
<!-- 数据绑定 -->
{{ msg }}
<button @click="changeMsg()">改变内容</button>
<!-- 数据模型绑定指令,只针对表单元素 -->
<input v-model="msg"/>
<!-- 展示数据可以使用绑定文本指令 -->
<div v-text="msg"></div>
<!-- 展示html -->
<div v-html="msg"></div>
</div>
`,
data() {
return {
msg: '初始内容'
};
},
methods: {
changeMsg() {
this.msg = '改变后的内容';
}
}
};
// 创建 Vue 应用
const app = Vue.createApp({
components: {
'my-hello-world': MyHelloWorld,
'my-component': MyComponent,
'demo1': Demo1 // 将 Demo1 组件注册到应用中
}
});
// 挂载应用
app.mount('#app');
</script>
</body>
</html>
Vue的双向数据绑定-组合式api
讲义选项式api的代码(src\components\Demo1.vue)复制一份改一改
src\components\Demo2.vue
<template>
<!-- 插值表达式,有点bug -->
<!-- 数据绑定 -->
{{ msg }}
<button @click="changeMsg()">改变内容</button>
<!-- 数据模型绑定指令,只针对表单元素 -->
<input v-model="msg"/>
<!-- 展示数据可以使用绑定文本指令 -->
<div v-text="msg"></div>
<!-- 展示html -->
<div v-html="msg"></div>
</template>
<script setup>
// 结构方式引入vue中的功能
import { ref, onMounted } from 'vue'
//----------消息业务
// 响应式状态:将普通的值转成响应式的值
const msg = ref('我是demo2');
// const msg = '我是demo2';//不是响应式的
// 用来修改状态、触发更新的函数
function changeMsg() {
//取得或修改响应式变量的值,必须用.value
msg.value='我是改变了的demo2';
}
// 生命周期钩子
onMounted(() => {
console.log(`The initial count is .`)
})
//-----------其他业务,u
</script>
<style scoped>
</style>
引入到MyApp.vue中
<!-- 视图模版:类似于html效果,展示用的 :必须有的-->
<template>
hello
<div>
<MyHelloWorld/>
<my-helloWorld/>
</div>
<div>
<Demo1/>
</div>
<hr/>
<div>
<Demo2/>
</div>
</template>
<!-- vue写js的脚本的地方,这里是组合式api :和模版必须有一个-->
<script setup>
// 引入子组件
import MyHelloWorld from './components/MyHelloWorld.vue';
import Demo1 from './components/Demo1.vue';
import Demo2 from './components/Demo2.vue';
</script>
<!-- 页面样式: scoped表示定义的样式只适用于当前页面;如果不加scoped样式全局有效。可选的可选的-->
<style scoped>
</style>
Element Plus
简介
这是饿了吗团队的作品,还不错。
官方:https://element.eleme.cn/#/zh-CN
它基于vue帮你做好了很多的组件,基本上覆盖到大部分的的,你用了它,就基本上不用太关心样式了。
分两个版本:一个基于vue2的element ui,另一个是基于vue3的element plus。
新版的element plus官网:https://element-plus.org/zh-CN/#/zh-CN
快速使用
第一步:初始化项目
新初始化一个vue的项目:必须是vue3
npm init vue@latest
输入项目名element-plus-demo,typescript选yes,后面都回车。
在项目中安装element-plus
# NPM
npm install element-plus
第二步:全局引入element
src\main.ts
启动项目:
npm run dev
浏览器打开:
第三步:使用组件
使用方式:复制粘贴即可
修改App.vue:
<template>
<div class="common-layout">
<el-container>
<el-header>Header</el-header>
<el-container>
<el-aside width="200px">Aside</el-aside>
<el-container>
<el-main>Main
<el-row class="mb-4">
<el-button>Default</el-button>
<el-button type="primary">Primary</el-button>
<el-button type="success">Success</el-button>
<el-button type="info">Info</el-button>
<el-button type="warning">Warning</el-button>
<el-button type="danger">Danger</el-button>
</el-row>
</el-main>
<el-footer>Footer</el-footer>
</el-container>
</el-container>
</el-container>
</div>
</template>
<script setup>
</script>
<style scoped>
</style>
vue-element-plus-admin
很多个人基于element plus做出一个接近成品的后台管理系统的前端。比如下面这个:
官网:http://element-plus-admin-doc.cn/
快速开始
第一步:下载源代码
从 GitHub 获取代码
第一步:下载源代码
从 GitHub 获取代码
# clone 代码
git clone https://github.com/kailong321200875/vue-element-plus-admin.git
#从 Gitee 获取代码-推荐
git clone https://gitee.com/kailong110120130/vue-element-plus-admin.git
第二步:将其解压到一个文件夹
此时可以用开发工具打开
第三步:安装pnpm
官方推荐用pnpm,
# 全局安装 pnpm
npm i -g pnpm
# 验证
pnpm -v
第四步:安装依赖
在项目根目录下,打开命令窗口执行,耐心等待安装完成即可
# 安装依赖
pnpm i
第五步:运行
当依赖安装完成后,执行以下命令即可启动项目:
pnpm run dev
浏览器打开
官网:http://element-plus-admin-doc.cn/