vue2-组件化编程

news/2024/11/18 18:26:11/文章来源:https://www.cnblogs.com/Mickey-7/p/18553357
  • 模块:向外提供特定功能的js呈现
  • 组件:用来实现局部(特定)功能效果的代码集合
  • 模块化:当应用中的 js 都以模块来编写的, 那这个应用就是一个模块化的应用
  • 组件化:当应用中的功能都是多组件的方式来编写的, 那这个应用就是一个组件化的应用

image-20241118132954314

image-20241118133612139

image-20241118133655554

编写组件-非单文件组件

非单文件组件:一个文件中包含有n个组件

Vue中使用组件的三大步骤:

  1. 定义组件(创建组件)
  2. 注册组件
  3. 使用组件(写组件标签)
定义组件

组件是可理解为可以复用的vm实例,使用Vue.extend(options)创建,其中options和new Vue(options)时传入的那个options几乎一样,data、回调、计算、监听等等,除了el

区别:

  1. el不要写:最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器
  2. data必须写成函数 :避免组件被复用时,数据存在引用关系
  3. 使用template可以配置组件结构
  4. 其他的回调、监听等等都是配置在组件内部而非vue实例
    // 创建school组件const school = Vue.extend({// 组件里面模版内容template: `<div><h1>{{ schoolName }}{{ address }}</h1></div>`,data: function () {return {schoolName: "school", address: "Beijing"}}})// 创建student组件const student = Vue.extend({template: `<div><h1>{{ name }}{{ address }}</h1></div>`,data: function () {return {name: "student", address: "Beijing"}}})
// 简写形式 
// const school = Vue.extend(options) 可简写为:const school = options// 创建组件-简写
const school = {// 组件里面模版内容template: `<div><h1>{{ schoolName }}{{ address }}</h1></div>`,data: function () {return {schoolName: "school", address: "Beijing"}}}// 如果简写,vue源码会完成调用extend
注册组件
  1. 局部注册
 // 创建vmnew Vue({el: "#root",data: {},// 注册组件-局部注册components: {// key:value形式,key为实际的组件名字,可以不和上面创建的名字一致school:school,student}})
  1. 全局注册

        // 全局注册组件Vue.extend("student",student)
    
使用组件
<div id="root"><!-- 编写组件标签,标签为components里面的key --><school></school><student></student></div>
注意事项

1.关于组件名:
一个单词组成:
第一种写法(首字母小写):school
第二种写法(首字母大写):School

​ 多个单词组成:
​ 第一种写法(kebab-case命名):my-school
​ 第二种写法(CamelCase命名):MySchool (需要Vue脚手架支持)
​ 备注:
​ (1).组件名尽可能回避HTML中已有的元素名称,例如:h2、H2都不行。
​ (2).可以使用name配置项指定组件在开发者工具中呈现的名字。

2.关于组件标签:
第一种写法:
第二种写法:
备注:不用使用脚手架时,会导致后续组件不能渲染

组件嵌套
   // 创建student组件const student = Vue.extend({template: `<div><h1>{{ name }}{{ address }}</h1></div>`,data: function () {return {name: "student", address: "Beijing"}},})// 创建school组件const school = Vue.extend({template: `<div><h1>{{ schoolName }}{{ address }}</h1><!--            使用 student组件 --><student></student></div>`,data: function () {return {schoolName: "school", address: "Beijing"}},// 注册组件-将student注册给school组件,school的局部组件components:{student}})// 创建vmnew Vue({el: "#root",data: {},components: {school:school,}})

在vue中,vue可以只管理一个组件,由该组件管理其余组件

// 创建app组件const app = {template: `<!--          app内调用 其余组件--><div><student></student><school></school></div>`,// 将其余组件注册给appcomponents: {school,student}}// 创建vmnew Vue({el: "#root",data: {},// 调用app组件template: `<app></app>`,components: {// 将app注册给 vueapp}})
VueComponent
  1. 组件本质是一个名为VueComponent的构造函数,不是程序员定义的,是Vue.extend生成
    console.log(school) //  VueComponent(options) {this._init(options);}
  1. 只需要写,Vue解析时帮我们创建school组件的实例对象,即Vue帮我们执行的:new VueComponent(options)

  2. 每次调用Vue.extend,返回的都是一个全新的VueComponent

      // extend部分源码 var Sub = function VueComponent (options) {this._init(options);};return Sub
    
  3. 组件配置中:data函数、methods中的函数、watch中的函数、computed中的函数,它们的this均是VueComponent实例对象

      const school = Vue.extend({name:"school",template: `<div><h1>{{ schoolName }}{{ address }}</h1></div>`,data: function () {console.log(this)// VueComponent {_uid: 3, _isVue: true, __v_skip: true, _scope: EffectScope, $options: {…}, …}return {schoolName: "school", address: "Beijing"}},})
    
  4. new Vue(options)配置中:data函数、methods中的函数、watch中的函数、computed中的函数,它们的this均是Vue实例对象

  5. 组件实例对象可以访问到Vue原型上的属性和方法

    VueComponent.prototype.__proto__ === Vue.prototype  // true
    

    image-20241118161909736

编写组件-单文件组件

单文件组件:一个文件中只包含1个组件 ,文件后缀是以.vue结尾的

.vue文件模版

<script>
// 编写组件的交互逻辑、数据等等</script><template><!-- 编写组件的结构 html --></template><style scoped>
/* 编写组件的样式 */
</style>
编写组件
  1. 编写一个Student 单文件组件,将该组件暴露出去 Student.vue
<script>
// 创建组件-默认暴露
export default {name: "Student",data: function () {return {name: "vue", address: "Beijing"}},methods: {tips(event) {alert(event.target.value)}}
}</script><template><!--  编写结构 --><div class="student"><h1>名字:{{ name }}</h1><h1>地址:{{ address }}</h1><button @click="tips"></button></div></template><style scoped>
// 编写样式
.class {width: 300px;height: 300px;background-color: skyblue;
}</style>
  1. 创建App主组件-注册其他组件,App.vue

    <script>// 引入Student组件
    import Student from "./Student.vue";export default {name: "App",// 注册Student组件components:{Student}}</script><template><div><Student></Student></div></template><style scoped></style>
    
  2. 编写js文件,创建vm实例,注册App组件 - main.js

    
    // 引入App组件
    import App from './App.vue'
    // 创建Vue实例
    new Vue({el:"#root",data:{test:"test"},components:{App}
    })
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/836299.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验4 类的组合、继承、模板类、标准库

任务2 源码:1 #include <iostream>2 #include <vector>3 #include <string>4 #include <algorithm>5 #include <numeric>6 #include <iomanip>7 8 using std::vector;9 using std::string;10 using std::cin;11 using std::cout;12 using…

人工智能之机器学习线代基础——行列式、矩阵的 逆(inverse)、伴随矩阵

行列式(Determinant) 是线性代数中的一个重要概念,用于描述方阵的一些性质。行列式是一个标量,计算方法和矩阵的大小有关。 不使用代数余子式的定义 不使用代数余子式的定义的三阶计算案例 矩阵的 逆(inverse) 伴随矩阵

十光年团队——Alpha冲刺总结

目录1.项目冲刺链接2.项目完成情况(1)项目预期计划(2)现实进展(3)项目的亮点(4)项目的不足3.过程体会4.队员分工作业所属的课程 软件工程2024作业要求 2024秋软工实践团队作业-第三次( Alpha冲刺)作业的目标 团队分工,记录冲刺进度,对任务进行总结团队名称 十光年团…

银河护胃队-冲刺日志(第五天)

作业所属课程 https://edu.cnblogs.com/campus/fzu/SE2024/作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305作业的目标 2024-11-15冲刺日志,记录每天的冲刺会议与进度团队名称 银河护胃队团队成员学号-名字 072208130-曹星才(组长)052205144-张诗悦1022…

数据采集作业4

数据采集作业四 gitee链接:https://gitee.com/wangzm7511/shu-ju/tree/master/作业4 1.使用 Selenium 爬取股票数据的实战 需求:熟练掌握 Selenium 查找 HTML 元素,爬取 Ajax 网页数据,等待 HTML 元素等内容。 使用 Selenium 框架 + MySQL 数据库存储技术路线爬取“沪深 A …

2.6

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D 模拟高程数据(假设数据已经过某种方式插值或生成) 这里我们创建一个简单的40x50网格,并填充随机高程值 x = np.linspace(0, 43.65, 40) y = np.linspace(0, 58.2, 50) X, Y = …

2.1

import numpy as np import matplotlib.pyplot as plt 定义 x 的范围 x = np.linspace(-5, 5, 400) 计算三个函数的值 y_cosh = np.cosh(x) y_sinh = np.sinh(x) y_half_exp = 0.5 * np.exp(x) 创建图形和坐标轴 plt.figure(figsize=(10, 6)) ax = plt.gca() 绘制函数 ax.plot(…

2.2

import numpy as np import matplotlib.pyplot as plt from scipy.integrate import quad def fun(t, x): return np.exp(-t) * (t ** (x - 1)) x = np.linspace(0, 10, 100) # x 的范围 y = [quad(fun, 0, np.inf, args=i)[0] for i in x] # 计算积分 plt.plot(x, y) plt.xl…

Windows 右键新建文件添加指定后缀-bat批处理-c文件

前言全局说明一、说明 环境: Windows 7 旗舰版二、添加,创建 .bat 后缀文件 在命令行里执行下面两条命令 reg add HKCR\.bat\ShellNew /v nullfile /f >nul reg add HKCR\batfile /ve /d BAT批处理文件 /f >nul三、添加,创建 .c 后缀文件 reg add HKCR\.c\ShellNew /v …

数据结构(倒排索引)

倒排索引和正排索引倒排索引和正排索引 倒排索引是什么?倒排索引 也被称作反向索引(inverted index),是用于提高数据检索速度的一种数据结构,空间消耗比较大。倒排索引首先将检索文档进行分词得到多个词语/词条,然后将词语和文档 ID 建立关联,从而提高检索效率。分词就是…

旺仔水饺-冲刺日志 Day 6

作业所属课程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305团队名称 旺仔水饺102201140 黎曼 102201138 黄俊瑶102201127 罗永辉 102201130 郑哲浩102202144 傅钰 102202147 赖越172209028 伊晓 052101418 陈…

服务器时间不对导致.NET SDK连接Minio失败

这两天想弄个简单的文件系统来做测试,选中了Minio,公司的测试环境是windows server2019,随手搜起一篇教程(MinIO注册成服务在后台运行(Win10)_minio windows 注册成服务在后台运行-CSDN博客),按图索骥,一顿操作猛如虎, 使用“WinSW”加入系统服务。打开网页一看,好使。…