wiki
模块化
1. 非单文件组件
一个文件中有多个组件,分为3步
1. 创建组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| const cp1 = Vue.extend({ template:"<div><h2>{{id}}</h2><h2>{{name}}/h2></div>", data():{// 必须使用函数式 return { id:"", name:"" } } })
// 可以简写把 Vue.extend() 去掉,直接写对象 const cp1 = { template:"<div><h2>{{id}}</h2><h2>{{name}}/h2></div>", data():{// 必须使用函数式 return { id:"", name:"" } } }
|
2. 注册组件
1 2 3 4 5 6 7 8 9 10
| // 局部注册 new Vue({ el:"#root", components:{ user:cp1 } })
// 全局注册 Vue.component('user',cp1)
|
3. 使用
编写组件标签
1 2 3
| <div> <user></user> </div>
|
2. 单文件组件
1. 使用
有 3 种标签可以使用
template
: 组件结构
script
: 组件脚本
style
: 组件样式,可选多种属性,如 scoped
使样式局部生效
1. 导出和引入
1 2 3 4 5
| // 默认导出 export default {...}
// 引入 import XXX from './XXX'
|
2. 文件结构
App.vue
: 主模板文件,引入其他组件
index.html
: 主容器文件
main.js
: 入口文件,并创建 Vue 实例
xxx.vue
: 其他组件文件
3. render
使用脚手架构建的 Vue 实例时,其不会直接包含模板解析器,必须使用 render()
函数来调用它来解析
2. 脚手架
脚手架标准化开发工具,使用步骤
- 全局安装 :
npm install -g @vue/cli
- 创建目录 : 切换到项目目录,创建项目
vue create 项目名
- 启动项目 :
npm run serve
3. 几个组件有关的属性
1. ref
用来给元素或子组件注册引用信息,等同于 id
属性:
- 应用在子组件上时,获取的是子组件实例
- 应用在 html 标签上时,时真实 DOM 元素
使用
1 2 3 4
| // 标记 <h1 ref="h"></h1> // 获取 this.$ref.h
|
2. props
让组件获取外部传进来的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| // 外部传递 <Hello name="xx" age="xx"/>
// 简单声明接收 props:['name','age']
// 数据类型限制 props:{ 'name':String, 'age':Number }
// 数据校验 props:{ 'name':{ type:String, // 限制类型 required:true // 必要 }, 'age':{ type:Number, dafault:18 // 默认值 } }
|
3. mixin
把多个组件共有的配置提取成一个混入对象
1 2 3 4 5 6 7 8 9 10 11
| // 定义 export const xxx = { data() {...}, methods: {...}, ... }
// 全局使用 Vue.mixin(xxx) // 局部使用 mixin:['xxx']
|
4. 注意
用于增强 Vue,包含一个 install(vue)
函数的对象,函数第一个参数是 Vue,第二个及以后得参数是插件使用者传递的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| // 定义插件 export default { install(vue, options) { // 可以用来全局过滤器 vue.filter(...) // 可以添加全局指令 vue.directive(...) // 可以配置全局混入 vue.mixin(...) // 可以添加实例方法、属性 vue.property.$myMethod = function() {...} vue.property.$myProperty = xxx } }
// 使用插件 Vue.use(插件名)
|
5. 注意
- 组件命名为多个单词,使用短横杠来命名或者驼峰命名,前者需要使用单引号,后者只能在脚手架中使用
1 2 3 4
| components:{ 'my-name':cp1, // 使用 <my-name></my-name> 来加载组件 // MyJob:cp2 // 只能在脚手架中使用 <MyJob></MyJob> }
|