飞道的博客

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

265人阅读  评论(0)

一,什么是组件

实现应用中局部功能代和资源的集合(简单来说就是将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. <body>
  2. <div id="user">
  3. <!-- 第3步使用组件编写组件标签 -->
  4. <school> </school>
  5. <br>
  6. <xuesheng> </xuesheng>
  7. </div>
  8. <div class="user2">
  9. <hello> </hello>
  10. </div>
  11. </body>
  12. <script>
  13. // 第一步:创建组件
  14. // 创建school组件
  15. const school = Vue. extend({
  16. template: `
  17. <div>
  18. <h2>学校名称:{{schoolName}}</h2>
  19. <h2>地址:{{address}}</h2>
  20. </div>
  21. `,
  22. // 组件里不用写el也不能写el,而且组件里必须写函数式
  23. data( ) {
  24. return {
  25. schoolName: '山鱼屋',
  26. address: 'Nanbian'
  27. }
  28. }
  29. })
  30. // 创建student组件
  31. const student = Vue. extend({
  32. template: `
  33. <div>
  34. <h2>学生名称:{{studentName}}</h2>
  35. <h2>年龄:{{age}}</h2>
  36. <button @click = 'showName'>点我出名</button>
  37. </div>
  38. `,
  39. // 组件里不用写el也不能写el,而且组件里必须写函数式
  40. data( ) {
  41. return {
  42. studentName: '山鱼屋',
  43. age: 20
  44. }
  45. },
  46. methods: {
  47. showName( ) {
  48. alert( this. studentName)
  49. }
  50. },
  51. })
  52. // 创建全局组件
  53. const hello = Vue. extend({
  54. template: `
  55. <div>
  56. <h2>你好呀!{{name}}</h2>
  57. </div>
  58. `,
  59. data( ) {
  60. return {
  61. name: 'shanyu',
  62. }
  63. }
  64. })
  65. // 注册全局的组件
  66. Vue. component( 'hello', hello);
  67. // 创建vm
  68. new Vue({
  69. el: '#user',
  70. // 第2步.注册组件
  71. components: {
  72. // 键值对形式(若键值对同名可简写)
  73. school,
  74. xuesheng: student
  75. }
  76. })
  77. new Vue({
  78. el: '.user2',
  79. })
  80. </script>

4.关于写法的注意点

1.关于组件名

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

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

注:

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

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

2.关于组件标签

第1种写法: <school></school>

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

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. 只需要写<school/>(自闭合标签)或<school></school>, 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实例对象]。

点赞:您的赞赏是我前进的动力! 👍
收藏:您的支持我是创作的源泉!
评论:您的建议是我改进的良药!
山鱼的个人社区:欢迎大家加入我的个人社区—— 山鱼社区


转载:https://blog.csdn.net/zhaochen1127/article/details/128626318
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场