vue 创建组件、组件选项、require.context全局自动注册组件

雨点打透心脏的1/2处 2021-07-24 16:31 627阅读 0赞
  1. 非脚手架环境:
  2. 根实例:
  3. new Vue({
  4. el: '#app',
  5. router,
  6. data: {
  7. name:'jeff'
  8. },
  9. components: { App },
  10. template: '<App :name="name" />'
  11. })
  12. 组件:
  13. Vue.component('App',{
  14. data(){ 组件的data选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝
  15. return{
  16. }
  17. },
  18. ...
  19. })
  20. 组件选项:
  21. export default{
  22. delimiters:["{
  23. {", "}}"], 改变纯文本插入解析分隔符{
  24. {}},只在完整构建版本中的浏览器内编译时可用。
  25. functional:true, 使组件无状态(没有data)和无实例(没有this上下文),他们用一个简单的render 函数返回虚拟节点使它们渲染的代价更小。
  26. 搭配函数式组件使用
  27. model:{prop:string, event: string } 自定义v-model使用
  28. inheritAttrs:false, 搭配给属性绑定自定义位置使用
  29. comments:true, 会保留且渲染模板中的HTML注释,默认行为是舍弃它们。
  30. 这个选项只在完整构建版本中的浏览器内编译时可用。
  31. }
  32. 脚手架环境:
  33. 1、在srccomponents下创建xx.vue文件
  34. <template lang='html'>
  35. <div>
  36. template内只能存在一个根容器
  37. </div>
  38. </template>
  39. <script>
  40. export default{
  41. name:'xxx',
  42. data(){
  43. return{
  44. xx
  45. }
  46. }
  47. }
  48. </script>
  49. <style lang='css' scoped> lang:使用的预编译器语言,scoped:表示样式只作用于当前组件
  50. </style>
  51. 2、在App.vue主入口文件的引入
  52. (1)script中引入该组件地址
  53. (2)在components中引入该组件名
  54. (3)在template中<组件名/>使用
  55. 首字母大写命名定义一个组件时MyComponentName
  56. <my-component-name> <MyComponentName> 都是可接受的。
  57. 直接在DOM(即非字符串的模板)中使用时只有 kebab-case 是有效的。
  58. 3、可以把JavaScriptCSS分离成独立的文件然后做到热重载和预编译
  59. <template>
  60. ...
  61. </template>
  62. <script src="./my-component.js"></script>
  63. <style src="./my-component.css"></style>
  64. 全局自动注册组件
  65. import Vue from 'vue'
  66. import upperFirst from 'lodash/upperFirst'
  67. import camelCase from 'lodash/camelCase'
  68. const requireComponent = require.context(
  69. './components', 其组件目录的相对路径
  70. false, 是否查询其子目录
  71. /Base[A-Z]\w+\.(vue|js)$/ 匹配基础组件文件名的正则表达式
  72. )
  73. 遍历文件路径
  74. requireComponent.keys().forEach(fileName => {
  75. 获取组件配置,和导入文件相同
  76. 文件中的export 导出结果为{x:xx,...}
  77. 文件中的export default 导出结果为{default:xx}
  78. const componentConfig = requireComponent(fileName)
  79. 获取组件的 PascalCase(驼峰写法)命名,
  80. const componentName = upperFirst( 转化为首字母大写
  81. camelCase( 转换为驼峰写法
  82. 获取和目录深度无关的文件名,即只获取文件名用来注册组件
  83. fileName
  84. .split('/')
  85. .pop()
  86. .replace(/\.\w+$/, '') 去掉文件后缀
  87. )
  88. )
  89. 全局注册组件
  90. Vue.component(
  91. componentName,
  92. 如果这个组件选项是通过 `export default` 导出的,
  93. 那么就会优先使用 `.default`
  94. 否则回退到使用模块的根。
  95. componentConfig.default || componentConfig 每个组件中export default导出的配置
  96. )
  97. })

发表评论

表情:
评论列表 (有 0 条评论,627人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue注册组件注册局部组件

    vue注册组件跟注册局部组件 > 由于以前都是用脚手架写的项目,因此常常忽略了这一点,由于最近入驻的公司是关于直播广告活动的,因此都是基于vue.js写出的项目,废话不多