首页 > 编程语言 >Vue组件化编程

Vue组件化编程

时间:2023-07-08 16:03:45浏览次数:27  
标签:school Vue const name 编程 组件 data

一、非单文件组件

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>非单文件组件</title>
  6     <script src="js/vue.js"></script>
  7 </head>
  8 <body>
  9 <!--
 10     Vue中使用组件的三大步骤:
 11         一、定义组件(创建组件)
 12         二、注册组件
 13         三、使用组件(写组件标签)
 14     一、如何定义一个组件?
 15         使用Vue.extend(options)创建,其中options和new Vue(options)时传入的那个options几乎一样,但也有点区别;
 16         区别如下:
 17             1.el不要写,为什么? ——— 最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器。
 18             2.data必须写成函数,为什么? ———— 避免组件被复用时,数据存在引用关系。
 19         备注:使用template可以配置组件结构。
 20     二、如何注册组件?
 21         1.局部注册:靠new Vue的时候传入components选项
 22         2.全局注册:靠Vue.component('组件名',组件)
 23     三、编写组件标签:
 24         <school></school>
 25 -->
 26 <!--
 27     几个注意点:
 28     1.关于组件名:
 29         一个单词组成:
 30             第一种写法(首字母小写):school
 31             第二种写法(首字母大写):School
 32         多个单词组成:
 33             第一种写法(kebab-case命名):my-school
 34             第二种写法(CamelCase命名):MySchool (需要Vue脚手架支持)
 35         备注:
 36             (1).组件名尽可能回避HTML中已有的元素名称,例如:h2、H2都不行。
 37             (2).可以使用name配置项指定组件在开发者工具中呈现的名字。
 38     2.关于组件标签:
 39         第一种写法:<school></school>
 40         第二种写法:<school/>
 41         备注:不用使用脚手架时,<school/>会导致后续组件不能渲染。
 42     3.一个简写方式:
 43         const school = Vue.extend(options) 可简写为:const school = options
 44 -->
 45 <div id="root">
 46     <hello></hello>
 47     <hr>
 48     <h1>{{msg}}</h1>
 49     <!-- 第三步:编写组件标签 -->
 50     <school></school>
 51     <hr>
 52     <!-- 第三步:编写组件标签 -->
 53     <student></student>
 54 </div>
 55 </body>
 56 <script type="text/javascript">
 57 
 58         // 第一步:创建school组件
 59         const school = Vue.extend({
 60             template:`
 61             <div>
 62                 <h2>学校名称:{{schoolName}}</h2>
 63                 <h2>学校地址:{{address}}</h2>
 64                 <button @click="showName">点我提示学校名</button>
 65             </div>
 66             `,
 67             data(){
 68                 return{
 69                     schoolName:"京东",
 70                     address:"北京"
 71                 }
 72             },
 73             methods:{
 74                 showName(){
 75                     alert(this.schoolName)
 76                 }
 77             }
 78         })
 79         // 第一步:创建student组件
 80         const student = Vue.extend({
 81             template:`
 82             <div>
 83                 <h2>学生姓名:{{studentName}}</h2>
 84                 <h2>学生年龄:{{age}}</h2>
 85             </div>
 86             `,
 87             data(){
 88                 return{
 89                     studentName:"张三",
 90                     age:18
 91                 }
 92             }
 93         })
 94 
 95         //第一步:创建hello组件
 96         const hello = Vue.extend({
 97             template:`
 98                 <div>
 99                     <h2>你好啊!{{name}}</h2>
100                 </div>
101             `,
102             data(){
103                 return {
104                     name:'Tom'
105                 }
106             }
107         })
108 
109         Vue.component('hello',hello)
110 
111         new Vue({
112             el:'#root',
113             data: {
114                 msg:'你好啊!'
115             },
116             //第二步:注册组件(局部注册)
117             components:{
118                 school,
119                 student
120             }
121         })
122 </script>
123 </html>

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>非单文件组件2</title>
 6     <script src="js/vue.js"></script>
 7 </head>
 8 <body>
 9 <div id="root">
10     <h1>{{msg}}</h1>
11     <app></app>
12 </div>
13 </body>
14 <script type="text/javascript">
15         const student = Vue.extend({
16             template:`
17             <div>
18                 <h2>学生姓名:{{name}}</h2>
19                 <h2>学生年龄:{{age}}</h2>
20             </div>
21             `,
22             data(){
23                 return{
24                     name:"张三",
25                     age:18
26                 }
27             }
28         })
29 
30         const school = Vue.extend({
31             template: `
32             <div>
33                 <h2>学校名称:{{name}}</h2>
34                 <h2>学校地址:{{address}}</h2>
35                 <student></student>
36             </div>
37             `,
38             data(){
39                 return{
40                     name:"京东",
41                     address:"北京"
42                 }
43             },
44             components:{
45                 student
46             }
47         })
48 
49         //定义hello组件
50         const hello = Vue.extend({
51             template:`<h1>{{msg}}</h1>`,
52             data(){
53                 return {
54                     msg:'欢迎来到京东学习!'
55                 }
56             }
57         })
58 
59         //定义app组件
60         const app = Vue.extend({
61             template:`
62                 <div>
63                     <hello></hello>
64                     <school></school>
65                 </div>
66             `,
67             components:{
68                 school,
69                 hello
70             }
71         })
72 
73         new Vue({
74             el:'#root',
75             data: {
76                 msg:'你好啊!'
77             },
78             components:{
79                 app
80             }
81         })
82 </script>
83 </html>

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>非单文件组件3-VueComponent</title>
 6     <script src="js/vue.js"></script>
 7 </head>
 8 <body>
 9 <!--
10     关于VueComponent:
11     1.school组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的。
12     2.我们只需要写<school/>或<school></school>,Vue解析时会帮我们创建school组件的实例对象,
13         即Vue帮我们执行的:new VueComponent(options)。
14     3.特别注意:每次调用Vue.extend,返回的都是一个全新的VueComponent!!!!
15     4.关于this指向:
16         (1).组件配置中:data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【VueComponent实例对象】。
17         (2).new Vue(options)配置中:data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象】。
18     5.VueComponent的实例对象,以后简称vc(也可称之为:组件实例对象)。
19         Vue的实例对象,以后简称vm。
20 
21     一个重要的内置关系:VueComponent.prototype.__proto__ === Vue.prototype    !!!!!!!!!
22     为什么要有这个关系:让组件实例对象(vc)可以访问到 Vue原型上的属性、方法。
23 -->
24 <div id="root">
25     <h1>{{msg}}</h1>
26     <school></school>
27     <hello></hello>
28 </div>
29 </body>
30 <script type="text/javascript">
31 
32         const school = Vue.extend({
33             name:"school",
34             template: `
35             <div>
36                 <h2>学校名称:{{name}}</h2>
37                 <h2>学校地址:{{address}}</h2>
38                 <button @click="showName">点我提示学校名</button>
39             </div>
40             `,
41             data(){
42                 return{
43                     name:"京东",
44                     address:"北京"
45                 }
46             },
47             methods: {
48                 showName(){
49                     console.log('showName',this)
50                 }
51             },
52         })
53 
54         const test = Vue.extend({
55             template:`<span>jingdong</span>`
56         })
57 
58         //定义hello组件
59         const hello = Vue.extend({
60             template:`
61             <div>
62               <h2>{{msg}}</h2>
63               <test></test>
64             </div>
65             `,
66             data(){
67                 return {
68                     msg:'欢迎来到京东学习!'
69                 }
70             },
71             components:{test}
72         })
73 
74         // console.log('@',school)
75         // console.log('#',hello)
76 
77         const vm = new Vue({
78             el:'#root',
79             data: {
80                 msg:'你好啊!'
81             },
82             components:{
83                 school,
84                 hello
85             }
86         })
87 </script>
88 </html>

二、单文件组件

1、index.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>index</title>
 6 </head>
 7 <body>
 8     <div id="root"></div>
 9     <script type="text/javascript" src="../js/vue.js"></script>
10     <script type="text/javascript" src="./main.js"></script>
11 </body>
12 </html>

2、main.js

1 import App from "./App";
2 
3 new Vue({
4     el:'#root',
5     template: `<App></App>`,
6     component:{
7         App
8     }
9 })

3、App.vue

 1 <template>
 2     <div>
 3     <School></School>
 4     <Student></Student>
 5     </div>
 6 </template>
 7 
 8 <script>
 9   import School from "./School";
10   import Student from "./Student";
11 
12     export default {
13         name:'App',
14         components:{
15       School,
16       Student
17         },
18         data(){
19             return {
20 
21             }
22         }
23     }
24 </script>

4、School.vue

 1 <template>
 2   <div class="demo">
 3     <h2>学校名称:{{name}}</h2>
 4     <h2>学校地址:{{address}}</h2>
 5     <button @click="showName">点我提示学校名</button>
 6   </div>
 7 </template>
 8 
 9 <script>
10   export default {
11     name:'School',
12     data(){
13       return {
14         name:'京东',
15         address:'北京'
16       }
17     },
18     methods: {
19       showName(){
20         alert(this.name)
21       }
22     },
23   }
24 </script>
25 
26 <style>
27   .demo{
28     background-color: orange;
29   }
30 </style>

5、Student.vue

 1 <template>
 2   <div>
 3     <h2>学生姓名:{{name}}</h2>
 4     <h2>学生年龄:{{age}}</h2>
 5   </div>
 6 </template>
 7 
 8 <script>
 9   export default {
10     name:'Student',
11     data(){
12       return {
13         name:'张三',
14         age:18
15       }
16     }
17   }
18 </script>

 

标签:school,Vue,const,name,编程,组件,data
From: https://www.cnblogs.com/bijian/p/17537338.html

相关文章

  • Python socket编程(转载)
    Pythonsocket编程https://www.cnblogs.com/linhaifeng/articles/6129246.html套接字工作流程服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,......
  • Linux网络编程: socket(链路层)
    Linux网络编程:socket(链路层)socket是什么在Linux中的网络编程是通过socket接口来进行的。其实socket接口也是一种特殊的I/O(在《深入理解计算机系统》这本书中的IO部分也有提到网络也是一种特殊的IO),它也是一种文件描述符。socket也有一个类似于打开文件的函数调用,该函数返回一个......
  • Unity UGUI的Text(文本)组件的介绍及使用
    UGUI的Text(文本)组件的介绍及使用什么是UGUI的Text(文本)组件?UGUI(UnityGraphicUserInterface)是Unity引擎的一套用户界面系统,而Text(文本)组件是UGUI中用于在游戏界面中显示文本的组件。该组件可以用于显示游戏中的文字、数字、标签等信息。为什么要使用UGUI的Text(文本)组件?使用UG......
  • 高级编程技巧揭秘!精通Python装饰器,打造灵活强大的代码结构!
    装饰器是Python中一种强大而灵活的编程技巧,它可以用于修改或扩展函数的行为,同时又不需要修改函数的源代码。本文将介绍Python中的装饰器的基本概念、使用方法以及高级技巧,帮助你从入门到精通装饰器的使用。一、基本概念在深入学习装饰器之前,我们首先需要了解一些基本概念。1.1......
  • 创建Vue3.0工程
    使用vue-cli创建官方文档:https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create##查看@vue/cli版本,确保@vue/cli版本在4.5.0以上vue--version##安装或者升级你的@vue/clinpminstall-g@vue/cli##创建vuecreatevue_test##启动cdvue_testnpmr......
  • vue基础教程
    vue基础教程英文官网中文官网渐进式JavaScript框架作者:尤雨溪特点遵循MVVM编码简洁,体积小,运行效率高,适合移动/PC端开发它本身只关注UI,也可以引入其它第三方库开发借鉴Angular的模板和数据绑定技术借鉴React的组件化和虚拟DOM技术Vue周边库vue-cli:vue......
  • vue高级
    vue高级vue脚手架我们可以使用VueCLI来创建vue脚手架项目VueCLI官方文档安装vue/clinpminstall-g@vue/cli#或yarnglobaladd@vue/clivue--version#或vue-V#升级npmupdate-g@vue/cli#或者yarnglobalupgrade--latest@vue/cli创建一个vue项目#......
  • C++之原子操作:实现高效、安全的多线程编程
    背景在多线程编程中,线程间的同步和数据竞争问题是无法避免的。传统的同步方法,如互斥锁(mutex)和条件变量(conditionvariable),可能导致性能下降和死锁等问题。C++11引入了原子操作,提供了一种更高效、安全的多线程编程方式。本文将介绍C++中的原子操作概念、使用方法及示例。C++中的......
  • Vue(十二):列表渲染—— v-for
    1.基础使用<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>基本列表</title><scripttype="text/javascript"src="../js/vue.js"></script></head><!--......
  • 介绍Vue router的history模式以及如何配置history模式
    引言Vuerouter给我们提供了两种路由模式,分别是hash模式和history模式。其中默认是使用hash模式,即URL中带有一个#符号,但是处于业务或个人喜爱的差别,Vuerouter也提供了history模式。但是由于Vue是单页SPA应用,所以每个路由并没有对应的html文件。什么是history模式history模式特......