# 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会在对应元素上添加唯一字符串属性,然后使用属性样式选择器,为该元素添加样式。 写法:`