脚本化组件[component]
组件(Component)是自定义封装代码的功能。在前端开发的过程中,经常出现多个网页的功能是重复的,而且很多不同的页面之间,也存在同意的功能。
而在网页中实现一个功能,需要使用html定义功能的内容结构,使用css生命功能的外观样式,还要使用js来定义功能的特效,因此就产生了把一个功能相关的[HTML、css和javascript]代码封装在一起组成一个整体的代码块封装模式,我们称之为”组件”。
所以,组件就是一个html网页中的功能,一般就是一个标签,标签中有自己的html内容结构,css样式和js特效。
这样,前端人员就可以在组件化开发时,只需要书写一次代码,随处引入即可使用。
vue的组件有两种:默认组件[全局组件]和单文件组件。组件名:小写加横杠
默认组件
全局注册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
   | <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title>     <script src="../js/vue.3.3.4.js"></script> </head> <body> <header-nav></header-nav> <div id="box">     <header-nav></header-nav>     <header-nav></header-nav>                               </div> <script>     //组件声明     //组件使用/其实和过滤器的使用方式很相似     // Vue.component("组件名", {     //     data() {     //     },//组件内部的数据     //     methods: {},//组件内部操作方法     //     template:"",//组件内部的html代码     // });
      //一般使用的方法组件名作为标签使用,所以组件名一般以两个单词左右     //组件内部的数据是隔离开来的是互相独立的,在操作过程中,又属于当前组件的vm对象进行控制     //以往我们学习过的所有代码都可以在组件中使用     const headerNav = {//导航栏         data() {             return {                 nav_list: ['首页', '注册', '详情', '列表'],                 num: 0//组件与组件之间的数据是隔离开来的             }         },//组件内部的数据         methods: {             show(nav) {                 alert(nav)             }         },//组件内部操作方法         template: `           <ul>           <li v-for="nav in nav_list"><a href="" @click.prevent="show(nav)">{{ nav }}</a></li>           <button @click="num++">+</button>           <input type="text" v-model.number="num">                                            </ul>`,//组件内部的html代码     };     //设计模式:链式调用:方法以当前对象作为返回值     const vm = Vue.createApp({         data() {             return {}         },         methods: {},         mounted() {         },         // });         // vm.component('header-nav', headerNav);         // vm.mount("##box");     }).component('header-nav', headerNav).mount("##box"); </script> </body> </html>
   | 
 
局部注册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
   | <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title>     <script src="../js/vue.3.3.4.js"></script> </head> <body> <header-nav></header-nav> <div id="box">     <header-nav></header-nav>     <header-nav></header-nav>     <headerNav></headerNav>      </div> <script>     const headerNav = {         data() {             return {                 nav_list: ['首页', '注册', '详情', '列表'],                 num: 0             }         },         methods: {             show(nav) {                 alert(nav)             }         },         template: `           <ul>           <li v-for="nav in nav_list"><a href=""            @click.prevent="show(nav)">{{ nav }}</a></li>           <button @click="num++">+</button>           <input type="text" v-model.number="num">           </ul>`,     };          const vm = Vue.createApp({         data() {             return {}         },         methods: {},         mounted() {         },         component: {                                       headerNav         }                                }).mount("##box");      </script> </body> </html>
   |