您现在的位置是:首页 > 技术教程 正文

【学Vue就跟玩一样】组件-非单文件组件的使用

admin 阅读: 2024-03-28
后台-插件-广告管理-内容页头部广告(手机)

一,什么是组件

实现应用中局部功能代和资源的集合(简单来说就是将html,js,css,资源整合起来的一个小盒子)

理解:用来实现局部(特定)功能效果的代码集合

为什么:一个界面的功能很复杂

作用:复用编码,简化项目编码,提高运行效率

组件又分为非单文件组件和单文件组件,一般常用的就是单文件组件

二,非单文件组件

2.1使用组件的三大步骤

1.创建组件

(1)如何定义一个组件?

使用Vue.extend(options )创建,其中options和new Vue(options)时传 入的那个options儿乎一样。但是也略有不同,组件内不需要写el该属性,因为组件是直接服务于Vue实例的,所以并不需要在组件内写,并且组件写完之后不只是服务于一个地方,这里就体现了组件的复用性,所以组件不能写el。

2.注册组件

(2)如何注册组件?

1.局部注册:靠new Vue的时候传入components选项

2.全局注册:靠Vue.component( '组件名,组件)

3.使用组件

(3)如何使用组件

编写组件标签(使用组件)

下面是创建非单文件组件的全过程

(4)为什么data必须写成函数?

避免组件被复用时,数据存在引用关系。

注:使用template 可以配置组件结构。

  1. <div id="user">
  2. <school>school>
  3. <br>
  4. <xuesheng>xuesheng>
  5. div>
  6. <div class="user2">
  7. <hello>hello>
  8. div>
  9. body>
  10. <script>
  11. // 第一步:创建组件
  12. // 创建school组件
  13. const school = Vue.extend({
  14. template: `
  15. 学校名称:{{schoolName}}

  16. 地址:{{address}}

  17. `,
  18. // 组件里不用写el也不能写el,而且组件里必须写函数式
  19. data() {
  20. return {
  21. schoolName: '山鱼屋',
  22. address: 'Nanbian'
  23. }
  24. }
  25. })
  26. // 创建student组件
  27. const student = Vue.extend({
  28. template: `
  29. 学生名称:{{studentName}}

  30. 年龄:{{age}}

  31. `,
  32. // 组件里不用写el也不能写el,而且组件里必须写函数式
  33. data() {
  34. return {
  35. studentName: '山鱼屋',
  36. age: 20
  37. }
  38. },
  39. methods: {
  40. showName() {
  41. alert(this.studentName)
  42. }
  43. },
  44. })
  45. // 创建全局组件
  46. const hello = Vue.extend({
  47. template: `
  48. 你好呀!{{name}}

  49. `,
  50. data() {
  51. return {
  52. name: 'shanyu',
  53. }
  54. }
  55. })
  56. // 注册全局的组件
  57. Vue.component('hello', hello);
  58. // 创建vm
  59. new Vue({
  60. el: '#user',
  61. // 第2步.注册组件
  62. components: {
  63. // 键值对形式(若键值对同名可简写)
  64. school,
  65. xuesheng: student
  66. }
  67. })
  68. new Vue({
  69. el: '.user2',
  70. })
  71. script>

4.关于写法的注意点

1.关于组件名

一个单词组成: 第一种写法( 首字母小写):+ school,第二种写法(首字母大写) School

多个单词组成: 第一种写法(kebab-case命 名):my-school,第二种写法(Came1Case命 名): MySchool (需要Vue脚手架支持)

注:

(1),组件名尽可能回避HTML中已有的元素名称,例如: h2、 H2都不行。

(2).可以使用name配置项指定组件在开发者工具中呈现的名字。

2.关于组件标签

第1种写法:

第2种写法: 备注:不用使用脚手架时, 会导致后续组件不能渲染。

3.简写方式

const school = Vue.extend(options)可简写为: const school = {options}

2.2组件的嵌套

和俄罗斯套娃差不多,大件套小件(其实vm下面还有一个名为app的组件,他管理着所有的组件)

  1. <body>
  2. <div id="user">
  3. div>
  4. <script>
  5. // 创建room组件
  6. const room = {
  7. template:
  8. `<div>
  9. <h2>
  10. 房间号{{num}}
  11. h2>
  12. <h2>
  13. puwei:{{pnum}}
  14. h2>
  15. div>`,
  16. data() {
  17. return {
  18. num: '222',
  19. pnum: '8'
  20. }
  21. }
  22. }
  23. // 创建students组件
  24. const students = {
  25. template:
  26. `<div>
  27. <h2>
  28. 姓名:{{name}}
  29. h2>
  30. <h2>
  31. 学号:{{studentnum}}
  32. h2>
  33. <room>room>
  34. div>`,
  35. data() {
  36. return {
  37. name: '山鱼',
  38. studentnum: '9657'
  39. }
  40. },
  41. components: {
  42. room
  43. }
  44. }
  45. // 创建school组件
  46. const school = {
  47. template:
  48. `<div>
  49. <h2>
  50. 校名:{{sname}}
  51. h2>
  52. <h2>
  53. 地址:{{address}}
  54. h2>
  55. <students>students>
  56. div>`,
  57. data() {
  58. return {
  59. sname: '山鱼学院',
  60. address: '华山道9088号'
  61. }
  62. },
  63. components: {
  64. students
  65. }
  66. }
  67. const app = {
  68. template:
  69. `
  70. <school>school>
  71. div>`,
  72. components: {
  73. school
  74. }
  75. }
  76. // 创建app组件
  77. new Vue({
  78. template:`<app>app>`,
  79. el: '#user',
  80. components: {
  81. app,
  82. }
  83. })
  84. script>
  85. body>

关于VueComponent

  1. school组件本质是一个 名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的。

  1. 只需要写(自闭合标签)或, Vue解析时会帮我们创建school组件的实例对象,也就是Vue帮我们执行的: new VueComponent(options)。

  1. 每次调用Vue.extend,返回的都是一一个全新的VueComponent(虽然双胞胎特别像但是无论怎么来说也不是相同的一个人)

  1. this指向

(1).组件配置中data函数、methods中的函数、watch中的函数、computed中的两数它们的this均 是[VueComponent实例对象]。

(2) new Vue(options )配置中data函数、methods中的函数、watch中的函数、computed中 的函数 它们的this均是[Vue实例对象]。

点赞:您的赞赏是我前进的动力!
标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜