# vue2-cli
**Repository Path**: chenjt54/vue2-cli
## Basic Information
- **Project Name**: vue2-cli
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 0
- **Created**: 2024-10-10
- **Last Updated**: 2025-09-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 笔记
## 脚手架文件结构
>
├── node_modules
├── public
| ├── favicon.ico: 页签图标
| └── index.html:主页面
├── src
| ├── assets: 存放静态资源
| | └── logo.png
| ├── component:存放组件
| | └── HelloWorld.vue
| ├── App.vue:汇总所有组件
| ├── main.js:入口文件
├── .gitignore: git版本管制忽略的配置
├── babel.config.js:babel的配置文件
├── package.json:应用包配置文件
├── README.md: 应用描述文件
├── package-lock.json:包版本控制文件
## 关于不同版本的Vue
- vue.js与vue.runtime.xxx.js的区别:
(1)vue.js是完整版的Vue,包含:核心功能+模板解析器
(2)vue.runtime.xxx.js是运行版的Vue,只包含:核心功能,没有模板解析器
- 因为vue.runtime.xxx.js没有模板解析器,所以不能使用template配置项,需要使用render函数接收到的createElement函数去指定具体内容
## vue.config.js配置文件
> 使用vue inspect > output.js可以查看到Vue脚手架的默认配置
> 使用vue.config.js可以对脚手架进行个性化定制,详情见:https://cli.vuejs.org/zh
## ref属性
1.被用来给元素或子组件注册引用信息(id的替代者)
2.应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc)
3.使用方式:
打标识:
......
或
获取:this.$refs.xxx
## 配置项props
功能:让组件接收外部传过来的数据
(1)传递数据:
(2)接收数据:
第一种方式(只接收)
props: ['name']
第二种方式(限制类型)
props: {
name: Number
}
第三种方式(限制类型、限制必要性、指定默认值)
props: {
name: {
type: String, // 类型
required: true, //必要性
default: '老王' // 默认值
}
}
备注:props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告,
若业务需求确实需要修改,那么请赋值props的内容到data中一份,然后去修改data中
的数据。
## mixin(混入)
功能:可以把多个组件共用的配置提取成一个混入对象
使用方式:
第一步定义混合,例如:
{
data(){...},
methods:{....}
....
}
第二步使用混入,例如:
(1)全局混入:Vue.mixin(xxx)
(2)局部混入:mixins:['xxx']
## 插件
>
功能:用于增强Vue
本质:包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据
>
定义插件:
>
```js
对象.install = function(Vue,options){
// 1.添加全局过滤器
Vue.filter(....)
// 2.添加全局指令
Vue.directive(....)
// 3.配置全局混入(合)
Vue.mixin(....)
// 4.添加实例方法
Vue.prototype.$myMethod = function(){....}
Vue.prorotype.$myProperty = xxx
}
```
>
使用插件:Vue.use()
## scoped样式
作用:让样式在局部生效,防止冲突
写法:的组件的内容
### 11.两个新的生命周期钩子
1.作用:路由组件所独有的两个钩子,用于捕获路由组件的激活状态
2.具体名字
1.activated路由组件被激活时触发
2.deactivated路由组件失活时触发
### 12.路由守卫
1.作用:对路由进行权限控制
2.分类:全局守卫、独享守卫、组件内守卫
3.全局守卫
```js
// 全局前置守卫:初始化时执行、1每次路由切换前执行
router.beforeEach((to,from,next)=>{
console.log('beforeEach',to,from)
if(to.meta.isAuth){// 判断当前路由是否需要进行权限控制
if(localStoreage.getItem('school') === 'chenjt'){// 权限控制的具体规则
next() // 放行
}else{
alert('暂无权限查看')
// next({name: 'guanyu'})
}
}else{
next() // 放行
}
})
// 全局后置守卫:初始化时放行、每次路由切换后执行
router.afterEach((to,from)=>{
console.log('afterEach',to,from)
if(to.meta.title){
document.title = to.meta.title // 修改网页的title
}else{
document.title = 'vue_test'
}
})
```
4.独享守卫
```js
beforeEnter(to,from.next){
console.log('beforeEnter',to,from)
if(to.meta.isAuth){// 判断当前路由是否需要进行权限控制
if(localStorage.getItem('school') === 'chenjt'){
next()
}else{
alert('暂无权限查看')
}
}else{
next()
}
}
```
5.组件内守卫
```js
// 进入守卫:通过路由规则,进入该组件时被调用
beforeRouteEnter(to,from,next){
},
// 离开守卫:通过路由规则,离开该组件时被调用
beforeRouteLeave(to,from,next){
}
```
### 13.路由器的两种工作模式
1.对于一个url来说,什么是hash值?---#及其后面的内容就是hash值
2.hash值不会包含在HTTP请求中,即:hash值不会带给服务器
3.hash模式:
1.地址中永远带着#号,不美观
2.若以后将地址通过第三方手机app分享,若app校验严格,则地址会被标记为不合法
3.兼容性较好
4.history模式
1.地址干净,美观
2.兼容性和hash模式相比略差
3.应用部署上线后需要后端人员支持,解决刷新页面服务端404的问题