一、脚手架相关的知识
1.CUE CLI脚手架
1.概念
2.检查是否安装node
3.安装Vue脚手架cli3,命令为 npm install -g @vue/cli(console控制台进行输入)
4 脚手架安装成功,命令为vue --version
5 引用脚手架2模板的相关的知识
1.安装脚手架cli2的模板,命令为 npm install @vue/cli-init -g
2.脚手架2的初始化项目 vue init webpack 项目名
说明:在webpack终端里面执行以上的命令,创建cli
1.给项目取名字,保持默认就行了
2.项目描述
3.配置作者名字
4.选择打包方式
5.是否使用路由
6.是否规范js代码
7.是否使用单元测试
8.是否进行端到端测试
9.选择npm管理工具
二、脚手架相关的知识
1.执行npm run dev时候,报以下的错误
Local package.json exists, but node_modules missing, did you mean to install?
2.查看文件夹中是否有node_modules文件夹,此时文件夹中没有node_modules文件,此时我们需要安装相关的夹包文件
3.安装夹包文件,安装的命令为npm install
4 然后再执行npm run dev,不会报错了
三、模板创建的步骤
** 1. runtime compiler模板**
template–>ast–>render–>vdom–>UI
** 2. runtime only模板**
render–>vdom–>UI
四、render函数的相关使用
1. 直接对页面的进行渲染–普通用法
new Vue({
el: '#app',
render: function (createElement) {
return createElement('h2',{class: 'box'},['hello world']);
}
})
createElement(参数一,参数2,参数3),参数一表示标签的名字,可以使用h1标签,参数2表示所使用的样式,属性可以是box
等相关的属性,参数3表示前端展示的类容
2. 直接对页面的进行渲染-组件对象
import Vue from 'vue'
import App from './App'
Vue.config.productionTip = false
const cpn={
template:'<div>{{message}}</div>',
data(){
return{
message:"我是组件message"
}
}
}
new Vue({
el: '#app',
render:function (createElement) {
return createElement(cpn);
}
})
五、CLI3的基本使用
1.CLI的使用方法,命令为vue create 项目名
2.选择一个配置
3.选择一个那个版本的vue.js
4.把配置文件放到单独的配置文件里面还是pack.json里面
5. 是否保存刚才的配置
6. 保存文件名字
7. 安装CLI3失败
重新安装cli3 npm install -g @vue/cli(console控制台进行输入)
8. 对CLI3配置更改的工具,执行vue ui
vue.config.js修改本地配置文件
六、箭头函数的使用
1.定义函数的方式
1.通过function函数定义函数
<script>
const a1=function(){
}
</script>
2.对象字面量定义函数
<script>
const obj={
bbb:function(){
}
aaa(){
}
}
</script>
3.箭头函数的使用方法
<script>
//无参数的使用
const ccc=() =>{
}
//含有参数和返回值的时候
const sum=(num1,num2) =>{
return num1+num2;
}
//放入一个参数的时候
const power=num=>{
return num*num;
}
//只有一行代码时
const mul=(num1,num2)=>num1*num2;
</script>
七、路由相关的知识
1.什么叫路由
2.更改url,实现url更改,但是页面没有进行刷新
1.方式一通过loacation中hash值进行修改
2.方式二通过history中pushState值进行修改
history.back()将会从栈里面取数据
通过history.go()方法取出对应的值
history.back()history.go(-1) history.forwardgo(1)
3.方式三通过history中replaceStatus值进行修改
但是这种方式没有历史记录
3.路由对象的创建过程
1.新建一个路由的文件夹和文件
2.在创建的index.js中引入路由相关的配置文件
import Vue from 'vue'
import Router from 'vue-router'
3.通过Vue.use(插件名)使用路由插件(index.js)
Vue.use(Router)
4.创建VueRouter对象对象(index.js)
const routes=[
]
const router=new VueRouter({
//配置路由和组件之间的映射关系
routes
})
5.将router对象传入到vue实例中(index.js)
export default router
6.在main.js中引入有关的实例
import Vue from 'vue'
import App from './App'
import router from './router'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
render: h => h(App)
})
7.修改inde.js中路由相关的配置文件
//配置路由相关的信息
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../components/Home'
import About from '../components/About'
//1.通过Vue.use(插件),安装插件
Vue.use(VueRouter)
//2.创建VueRouter对象
const routes=[
{
path:'/home',
component:Home,
},
{
path:'/about',
component:About,
}
]
const router=new VueRouter({
//配置路由和组件之间的映射关系
routes,
//路由的模式的设置
mode:'history'
})
//3.将router对象传入到vue实例中
export default router
8.修改App.vue,使得显示的效果渲染出来
<template>
<div id="app">
<router-link to="/home">首页</router-link>
<router-link to="/about">关于</router-link>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
<style>
</style>
9.对开始加载类容一开始就显示为首页的图标,这里需要使用重定向指令
4.路由router-link里面相关属性的介绍
1.to属性表示跳转到对应组件
说明:/home表示跳转到定义的home组件当中,/about表示跳转到定义的about的组件当中
2.tag属性表示定义使用标签的属性,当无tag属性时,tag默认的属性为a标签,还可以渲染成button
3.replace属性,使得生成的网页无相关返回历史
4.设置点击按钮改变背景颜色和字体颜色
<style>
.router-link-active{
color: white;
background-color: red;
}
</style>
5.active-class属性表示把router-link-active修改为其他名字
说明需要批量改router-link-active的名字的时候,可以在路由配置里面设置linkActiveClass属性进行修改
6.通过代码实现页面的点击事件
<template>
<div id="app">
<!-- <router-link to="/home" tag="button" replace active-class="active">首页</router-link>
<router-link to="/about" tag="button" replace active-class="active">关于</router-link>-->
<!-- <router-link to="/home" tag="button" replace >首页</router-link>
<router-link to="/about" tag="button" replace>关于</router-link>-->
<button @click="homeClick">首页</button>
<button @click="aboutClick">关于</button>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App',
methods:{
homeClick:function () {
this.$router.replace('/home');
},
aboutClick:function(){
this.$router.replace('/about');
}
}
}
</script>
<style>
.active{
color: white;
background-color: red;
}
</style>
7.实现url地址的动态拼接
1.配置用户模板
<template>
<div>
<h2>我是用户界面</h2>
<p>我要开始学习代码相关的知识了</p>
</div>
</template>
<script>
export default {
name: "User",
}
</script>
<style scoped>
</style>
2.配置导入用户模板
//配置路由相关的信息
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../components/Home'
import About from '../components/About'
import User from '../components/User'
//1.通过Vue.use(插件),安装插件
Vue.use(VueRouter)
//2.创建VueRouter对象
const routes=[
{
path: '',
redirect:'/home'
},
{
path:'/home',
component:Home,
},
{
path:'/about',
component:About,
},
{
path:'/user/:userId',
component:User,
}
]
const router=new VueRouter({
//配置路由和组件之间的映射关系
routes,
//表示路由的模式
mode:'history',
linkActiveClass:'active'
})
//3.将router对象传入到vue实例中
export default router
3.配置前端显示页面
<template>
<div id="app">
<!-- <router-link to="/home" tag="button" replace active-class="active">首页</router-link>
<router-link to="/about" tag="button" replace active-class="active">关于</router-link>-->
<router-link to="/home" tag="button" replace >首页</router-link>
<router-link to="/about" tag="button" replace>关于</router-link>
<router-link v-bind:to="'/user/'+userId" tag="button" replace>用户</router-link>
<!-- <button @click="homeClick">首页</button>
<button @click="aboutClick">关于</button>-->
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App',
data(){
return{
userId:'LiSi'
}
}
// methods:{
// homeClick:function () {
// this.$router.replace('/home');
// },
// aboutClick:function(){
// this.$router.replace('/about');
// }
// }
}
</script>
<style>
.active{
color: white;
background-color: red;
}
</style>
4.后端获取相应userId值进行显示
<template>
<div>
<h2>我是用户界面</h2>
<p>我要开始学习代码相关的知识了</p>
<h3>{{userId}}</h3>
</div>
</template>
<script>
export default {
name: "User",
computed:{
userId(){
return this.$route.params.userId;
}
}
}
</script>
<style scoped>
</style>
5.后端显示效果为
8、打包文件相关的介绍
1.打包文件夹显示
1.1 index.html
是打包之后的页面
1.2 css
表示打包之后所有的css样式
1.2 js
app表示所有你写的js的样式,都打包再app.xxxx.js里面
vendor表示第三方的js代码
mainfest表示对模块化做底层支撑的,import,export
2.路由懒加载模式的使用
2.1 结合Vue的异步组件和webpack的代码分析
const home=resolve=>{require.ensure(['../components/Home.vue'],()=>{resolve(require('../components/Home.vue'))})
}
2.2 AMD写法
const About=resolve=>require(['../components/About.vue'],resolve);
2.3 在ES6中,我们可以有更加简单的写法来组织Vue异步组件和webpack的代码分割
3.嵌套路由
3.1 什么嵌套路由
通过home/news,home/message等形式显示出来页面的形式
3.2 嵌套路由的实现
1.创建组件
HomeNews组件
<template>
<div>
<ul>
<li>新闻1</li>
<li>新闻2</li>
<li>新闻3</li>
<li>新闻4</li>
</ul>
</div>
</template>
<script>
export default {
name: "HomeNews"
}
</script>
<style scoped>
</style>
HomeMessage组件
<template>
<div>
<ul>
<li>消息1</li>
<li>消息2</li>
<li>消息3</li>
<li>消息4</li>
</ul>
</div>
</template>
<script>
export default {
name: "HomeMessage"
}
</script>
<style scoped>
</style>
2.创建组件
//配置路由相关的信息
import Vue from 'vue'
import VueRouter from 'vue-router'
// import Home from '../components/Home'
// import About from '../components/About'
// import User from '../components/User'
const Home=()=>import('../components/Home')
const About=()=>import('../components/About')
const User=()=>import('../components/User')
const HomeNews=()=>import('../components/HomeNews')
const HomeMessage=()=>import('../components/HomeMessage')
//1.通过Vue.use(插件),安装插件
Vue.use(VueRouter)
//2.创建VueRouter对象
const routes=[
{
path: '',
redirect:'/home'
},
{
path:'/home',
component:Home,
children:[
{
path: '',
redirect:'news'
},
{
path:'news',
component:HomeNews,
},
{
path: 'message',
component: HomeMessage,
}
]
},
{
path:'/about',
component:About,
},
{
path:'/user/:userId',
component:User,
}
]
const router=new VueRouter({
//配置路由和组件之间的映射关系
routes,
//表示路由的模式
mode:'history',
linkActiveClass:'active'
})
//3.将router对象传入到vue实例中
export default router
3.创建组件
<template>
<div>
<h2>我是首页</h2>
<p>我是首页类容,哈哈哈</p>
<router-link to="/home/news">新闻</router-link>
<router-link to="/home/message">消息</router-link>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: "Home"
}
</script>
<style scoped>
</style>
3.3 传递参数的形式
1 通过params传递
配置main.js路由组件
//配置路由相关的信息
import Vue from 'vue'
import VueRouter from 'vue-router'
// import Home from '../components/Home'
// import About from '../components/About'
// import User from '../components/User'
const Home=()=>import('../components/Home')
const About=()=>import('../components/About')
const User=()=>import('../components/User')
const HomeNews=()=>import('../components/HomeNews')
const HomeMessage=()=>import('../components/HomeMessage')
//1.通过Vue.use(插件),安装插件
Vue.use(VueRouter)
//2.创建VueRouter对象
const routes=[
{
path: '',
redirect:'/home'
},
{
path:'/home',
component:Home,
children:[
{
path: '',
redirect:'news'
},
{
path:'news',
component:HomeNews,
},
{
path: 'message',
component: HomeMessage,
}
]
},
{
path:'/about',
component:About,
},
{
path:'/user/:userId',
component:User,
}
]
const router=new VueRouter({
//配置路由和组件之间的映射关系
routes,
//表示路由的模式
mode:'history',
linkActiveClass:'active'
})
//3.将router对象传入到vue实例中
export default router
配置app.vue组件
<template>
<div id="app">
<!-- <router-link to="/home" tag="button" replace active-class="active">首页</router-link>
<router-link to="/about" tag="button" replace active-class="active">关于</router-link>-->
<router-link to="/home" tag="button" replace >首页</router-link>
<router-link to="/about" tag="button" replace>关于</router-link>
<router-link v-bind:to="'/user/'+userId" tag="button" replace>用户</router-link>
<!-- <button @click="homeClick">首页</button>
<button @click="aboutClick">关于</button>-->
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App',
data(){
return{
userId:'LiSi'
}
}
// methods:{
// homeClick:function () {
// this.$router.replace('/home');
// },
// aboutClick:function(){
// this.$router.replace('/about');
// }
// }
}
</script>
<style>
.active{
color: white;
background-color: red;
}
</style>
配置user.js组件
<template>
<div>
<h2>我是用户界面</h2>
<p>我要开始学习代码相关的知识了</p>
<h3>{{userId}}</h3>
</div>
</template>
<script>
export default {
name: "User",
computed:{
userId(){
return this.$route.params.userId;
}
}
}
</script>
<style scoped>
</style>
2 通过query传递
创建profile组件
<template>
<div>
<h2>我是Profile组件</h2>
</div>
</template>
<script>
export default {
name: "Profile"
}
</script>
<style scoped>
</style>
路由中配置profile组件信息
//配置路由相关的信息
import Vue from 'vue'
import VueRouter from 'vue-router'
// import Home from '../components/Home'
// import About from '../components/About'
// import User from '../components/User'
const Home=()=>import('../components/Home')
const About=()=>import('../components/About')
const User=()=>import('../components/User')
const HomeNews=()=>import('../components/HomeNews')
const HomeMessage=()=>import('../components/HomeMessage')
const Profile= () =>import('../components/Profile')
//1.通过Vue.use(插件),安装插件
Vue.use(VueRouter)
//2.创建VueRouter对象
const routes=[
{
path: '',
redirect:'/home'
},
{
path:'/home',
component:Home,
children:[
{
path: '',
redirect:'news'
},
{
path:'news',
component:HomeNews,
},
{
path: 'message',
component: HomeMessage,
}
]
},
{
path:'/about',
component:About,
},
{
path:'/user/:userId',
component:User,
},
{
path:'/profile',
component:Profile,
}
]
const router=new VueRouter({
//配置路由和组件之间的映射关系
routes,
//表示路由的模式
mode:'history',
linkActiveClass:'active'
})
//3.将router对象传入到vue实例中
export default router
前端显示profile信息
<template>
<div id="app">
<!-- <router-link to="/home" tag="button" replace active-class="active">首页</router-link>
<router-link to="/about" tag="button" replace active-class="active">关于</router-link>-->
<router-link to="/home" tag="button" replace >首页</router-link>
<router-link to="/about" tag="button" replace>关于</router-link>
<router-link v-bind:to="'/user/'+userId" tag="button" replace>用户</router-link>
<router-link :to="{path:'/profile',query: {name:'Nickel',age: 18, height: 180}}" tag="button" replace>档案</router-link>
<!-- <button @click="homeClick">首页</button>
<button @click="aboutClick">关于</button>-->
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App',
data(){
return{
userId:'LiSi'
}
}
// methods:{
// homeClick:function () {
// this.$router.replace('/home');
// },
// aboutClick:function(){
// this.$router.replace('/about');
// }
// }
}
</script>
<style>
.active{
color: white;
background-color: red;
}
</style>
接收查询参数并显示结果
<template>
<div>
<h2>我是Profile组件</h2>
<p>我叫:{{this.$route.query.name}},今年{{this.$route.query.age}}岁,我身高是{{this.$route.query.height}}</p>
</div>
</template>
<script>
export default {
name: "Profile"
}
</script>
<style scoped>
</style>
3.4 导航守卫
3.41 单个进行修改
更改首页代码
<template>
<div>
<h2>我是首页</h2>
<p>我是首页类容,哈哈哈</p>
<router-link to="/home/news">新闻</router-link>
<router-link to="/home/message">消息</router-link>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: "Home",
created() {
document.title='首页'
}
}
</script>
<style scoped>
</style>
更改关于代码
<template>
<div>
<h2>我是关于</h2>
<p>我是关于类容,呵呵呵</p>
</div>
</template>
<script>
export default {
name: "About",
created() {
document.title='关于'
}
}
</script>
<style scoped>
</style>
3.42 批量进行修改
修改router下面index.js
//配置路由相关的信息
import Vue from 'vue'
import VueRouter from 'vue-router'
// import Home from '../components/Home'
// import About from '../components/About'
// import User from '../components/User'
const Home=()=>import('../components/Home')
const About=()=>import('../components/About')
const User=()=>import('../components/User')
const HomeNews=()=>import('../components/HomeNews')
const HomeMessage=()=>import('../components/HomeMessage')
const Profile= () =>import('../components/Profile')
//1.通过Vue.use(插件),安装插件
Vue.use(VueRouter)
//2.创建VueRouter对象
const routes=[
{
path: '',
redirect:'/home'
},
{
path:'/home',
component:Home,
meta:{
title:'首页'
},
children:[
{
path: '',
redirect:'news'
},
{
path:'news',
component:HomeNews,
},
{
path: 'message',
component: HomeMessage,
}
]
},
{
path:'/about',
component:About,
meta:{
title:'关于'
},
},
{
path:'/user/:userId',
component:User,
meta:{
title:'用户'
},
},
{
path:'/profile',
component:Profile,
meta:{
title:'档案'
},
}
]
const router=new VueRouter({
//配置路由和组件之间的映射关系
routes,
//表示路由的模式
mode:'history',
linkActiveClass:'active'
})
router.beforeEach((to,from,next)=>{
document.title=to.matched[0].meta.title;
next()
})
//3.将router对象传入到vue实例中
export default router
3.42 实现页面的保存–当再次回到页面的时候还是原来的页面
修改home.vue
<template>
<div>
<h2>我是首页</h2>
<p>我是首页类容,哈哈哈</p>
<router-link to="/home/news">新闻</router-link>
<router-link to="/home/message">消息</router-link>
<keep-alive>
<router-view></router-view>
</keep-alive>
</div>
</template>
<script>
export default {
data(){
return{
message:'你好呀',
path:'/home/news'
}
},
name: "Home",
created() {
console.log('Home created');
},
destroyed() {
console.log('Home destroyed');
},
activated() {
console.log('Home activated');
this.$router.push(this.path)
},
beforeRouteLeave (to, from, next) {
this.path=this.$route.path;
next();
}
}
</script>
<style scoped>
</style>
3.5 Tabbar的创建过程
https://blog.youkuaiyun.com/nickel369/article/details/110541599
3.6 Promise使用方法
初始网络请求方式
setTimeout(()=>{
console.log('Hello World!');
console.log('Hello World!');
console.log('Hello World!');
console.log('Hello World!');
console.log('Hello World!');
setTimeout(()=>{
console.log('Helllo vuejs');
console.log('Helllo vuejs');
console.log('Helllo vuejs');
console.log('Helllo vuejs');
setTimeout(()=>{
console.log('Hello pyhon');
console.log('Hello pyhon');
console.log('Hello pyhon');
console.log('Hello pyhon');
console.log('Hello pyhon');
},1000);
},1000);
}
1000);
promise网络请求方式
<script>
//1.使用setTimeout
// setTimeout(()=>{
// console.log('Hello World!')},
// 1000);
new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve()
},1000);
}).then(()=>{
console.log('Hello World!');
console.log('Hello World!');
console.log('Hello World!');
console.log('Hello World!');
console.log('Hello World!');
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve()
},1000);
})
}).then(()=>{
console.log('Helllo vuejs');
console.log('Helllo vuejs');
console.log('Helllo vuejs');
console.log('Helllo vuejs');
return new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve()
},1000)
})
}).then(()=>{
console.log('Hello pyhon');
console.log('Hello pyhon');
console.log('Hello pyhon');
console.log('Hello pyhon');
console.log('Hello pyhon');
})
</script>