# vue-learn-senior
**Repository Path**: front-learning/vue-learn-senior
## Basic Information
- **Project Name**: vue-learn-senior
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-08-25
- **Last Updated**: 2021-09-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# VUE LEARN
## 脚手架文件结构
├── 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
首先,`import Vue from 'vue'`引入了vue组件,但是该组件中有很多版本的vue,其中,在vue文件夹中的`package.json`文件中,`"module": "dist/vue.runtime.esm.js"`这句话表示如果是以es6的语法,那么实际依赖的是vue.runtime.esm.js文件。而esm表示es module的意思。
1. vue.js 与 vue.runtime.xxx.js的区别:
a. vue.js是完整版的Vue,包含:核心功能+模板解释器
b. vue.runtime.xxx.js是运行版的Vue,只包括核心功能,没有模板解释器。
2. 因为vue.runtime.xxx.js没有模板解释器,所以不能使用template配置项(不是template标签形式),所以需要使用render函数接受createElement函数去指定具体内容。
## vue.config.js配置文件
1. 使用vue inspect > output.js可以查看到Vue脚手架的默认配置。
2. 使用vue.config.js可以对脚手架进行个性化定制,详情见:https://cli.vuejs.org/zh
```javascript
module.exports = {
pages: {
index: {
entry: 'src/main.js' // 入口文件
}
},
lintOnSave: false //关闭lint语法检查。否则未使用的代码,方法会编译错误。
}
```
## ref属性
1. 被用来给元素或者子组件注册引用信息(替代id)
2. 应用在html标签上获取的是真实的dom元素,应用在组件标签上是组件实例对象(vc)
3. 使用方式:
打标识:
````html
````
获取:
this.$refs.xxx
## 配置项props
功能:让组件接受外部传过来的数据
1. 传递数据:
~~~javascript
~~~
2. 接受数据
(1) 接受:
~~~javascript
export default {
...
props:['myProp']
}
~~~
(2) 限制类型:
~~~javascript
export default {
...
props:{
myProp:String,
myProp2:Number,
...
}
}
~~~
(3) 限制类型,限制必要性,指定默认值
~~~javascript
export default {
...
props:{
myProp:{
type:String,
required:true,
},
myProp2:{
type:Number,
default:99
},
...
}
}
~~~
3. 备注:
(1) props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告。
(2) **Vue对`props`的读取要早于`data`**。因此,如果业务需要修改,可以在`data`中定义一个属性,并且将`props`中的属性赋值给`data`中的属性。然后修改`data`中属性。
## mixin(混入)
功能:可以把多个组件公用的配置提取成一个混入对象
使用方式:
1. 定义混合,并导出(export)
````javascript
export const mixinObj = {
data(){},
methods: {
showName() {
alert(this.name)
},
},
mounted() {
console.log("你好啊")
}
}
````
其中,`data`和`methods`如果发生重复,以组件内部为准。而`mounted`等生命周期函数发生重复,则混合其中的内容,先执行混入对象定义的内容,然后执行组件内定义的内容。
2. 使用混入,例如:
(1)全局混入:Vue.mixin(xxx)。全局混入后,关于生命周期的方法,所有组件都会执行
(2)局部混入:
```javascript
import { xxx } from "../mixin";
...
...
export default {
...
mixins:[xxx]
}
```
## plugins 插件
功能:用于增强Vue
本质:包含一个`install`方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据。
1. 定义插件:
~~~javascript
export default {
install(Vue, p1, p2, p3) {
Vue.filter('charSplice', function (value) {
return value.slice(0, 4);
})
Vue.directive('big', function (element, binding) {
element.innerText = binding.value * 10
});
Vue.mixin({
data(){
return {
a0:10,
a1:100
}
},
mounted() {
console.log("你好啊")
}
})
Vue.prototype.hello = (name) => alert('你好啊,'+name)
}
}
~~~
2. 使用插件
~~~JavaScript
import plugins from './plugins'
Vue.use(plugins, p1, p2, p3)
~~~
## scoped 样式
作用:让样式在局部生效,防止冲突。原理:通过添加scoped,vue会在对应元素上添加唯一字符串属性,然后使用属性样式选择器,为该元素添加样式。
写法:`