vue前端框架课程笔记(五)

news2025/1/10 20:30:18

目录

  • 非文件组件使用步骤
    • 定义组件
      • 示例(第一部分):使用Vue.extend函数创建三个组件
    • 注册组件
      • 示例(第二部分):组件的全局和局部注册
    • 组件使用
      • 示例(第三部分):编写组件标签
      • 最终结果
  • 组件注意事项
  • 组件嵌套
    • 组件定义
    • 组件注册
    • 组件使用
  • 其他需要注意的地方

本博客参考尚硅谷官方课程,详细请参考

  • 【尚硅谷bilibili官方】

本博客以vue2作为学习目标(请勿混淆v2与v3的代码规范,否则可能出现报错),详细教程请参考

  • 【 v2.x 官方文档】

非文件组件使用步骤

  • 定义组件(创建组件)
  • 注册组件
  • 使用组件(写组件标签)

定义组件

使用Vue.extend(options)创建组件,其中options和new Vue(options)时传入的那个options几乎一样,但也有区别

区别:

  • 组件中el配置项不要写,为什么? ——— 最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器。
  • 组建中data配置项必须写成函数,为什么? ———— 避免组件被复用时,数据存在引用关系。

示例(第一部分):使用Vue.extend函数创建三个组件

<script>
	//创建学校组件
    const school = Vue.extend({
      template: `
			<div class="demo">
				<h2>学校名称:{{schoolName}}(school组件)</h2>
				<h2>学校地址:{{address}}</h2>
				<button @click="showName">点我提示学校名</button>	
			</div>
		`,
      data() {
        return {
          schoolName: "尚硅谷",
          address: "北京昌平",
        };
      },
      methods: {
        showName() {
          alert(this.schoolName);
        },
      },
    });
    //创建student组件
    const student = Vue.extend({
      template: `
			<div>
				<h2>学生姓名:{{studentName}}(student组件)</h2>
				<h2>学生年龄:{{age}}</h2>
			</div>
		`,
      data() {
        return {
          studentName: "张三",
          age: 18,
        };
      },
    });
    //创建hello组件
    const hello = Vue.extend({
      template: `
		<div>	
			<h2>你好啊!{{name}}(hello组件)</h2>
		</div>
	`,
      data() {
        return {
          name: "Tom",
        };
      },
    });
</script>

注册组件

  1. 局部注册:new Vue时传入components选项
  2. 全局注册:Vue.component('组件名',组件)

注意:

  • 组件必须先创建后注册,否则会发生报错: “Uncaught ReferenceError: Cannot access ‘school’ before initialization”
  • 完成组件创建和注册后,创建Vue实例指向某个DOM容器是必要的,也就是说组件最外层需要Vue实例包裹,否则vue自定义组件无法渲染,组件无法显示

示例(第二部分):组件的全局和局部注册

<script>
    //全局注册组件
    Vue.component("hello", hello);

    //创建Vue实例vm
    new Vue({
      el: "#root",
      data: {
        msg: "此处位于root节点!",
      },
      //注册组件(局部注册)
      components: {
        school,
        student,
      },
    });
    // 创建Vue实例vm
    new Vue({
      el: "#root2",
      data() {
        return {
          msg: "此处位于root2节点!",
        };
      },
    });
</script>

组件使用

示例(第三部分):编写组件标签

<body>
  <div id="root">
    <!--编写组件标签-->
    <hello></hello>
    <h1>{{msg}}</h1>
    <!--编写组件标签 -->
    <school></school>
    <!--编写组件标签 -->
    <student></student>
  </div>
  <hr />
  <div id="root2">
    <h1>{{msg}}</h1>
    <hello></hello>
  </div>
</body>

最终结果

在这里插入图片描述

组件注意事项

  • 命名规则
    (1)一个单词组成时:
    第一种写法(首字母小写):school
    第二种写法(首字母大写):School
    (2)多个单词组成:
    第一种写法(kebab-case命名):my-school
    第二种写法(CamelCase命名):MySchool (需要Vue脚手架支持)
  • 组件名尽可能回避HTML中已有的元素名称,例如:h2、H2都不行。
  • 可以使用name配置项指定组件在开发者工具中呈现的名字。
  • 编写组件标签
    第一种写法:<school></school>
    第二种写法:<school/>(这种写法在没有使用脚手架的时候会造成标签没有办法渲染)
  • 注册组件的简写方法
    const school = Vue.extend(options) //简写为 const school = options

组件嵌套

组件定义

下面我们将先定义一个student组件,然后再定义一个school组件,在后者注册student组件

<script>
	  //定义student组件
	  const student = Vue.extend({
	    name: "student",
	    template: `
			<div>
				<h2>学生姓名:{{name}}(学生组件)</h2>	
			</div>
			`,
	    data() {
	      return {
	        name: "张三",
	      };
	    },
	  });
	
	  //定义school组件
	  const school = Vue.extend({
	    name: "school",
	    template: `
			<div>
				<h2>学校名称:{{name}}(学校组件)</h2>	
				<student></student>
			</div>
			`,
	    data() {
	      return {
	        name: "尚硅谷",
	      };
	    },
	    //在school组件中注册组件(局部)
	    components: {
	      student,
	    },
	  });

</script>

组件注册

<script>
// 全局组件注册
Vue.component("school", school);
// 创建Vue实例vm,用于包裹组件
new Vue({
  el: "#root",
});
</script>

组件使用

<body>
  <div id="root">
    <school></school>
  </div>
</body>

效果
在这里插入图片描述

浏览器开发者工具
在这里插入图片描述

其他需要注意的地方

关于VueComponent组件函数

上面代码中我们曾经定义个多个组件,实际上这些组件本质是一个名为VueComponent的构造函数,由Vue.extend生成。我们只需要写<school/>或<school></school>,Vue解析时会帮我们创建school组件的实例对象,即Vue帮我们执行了:new VueComponent(options)

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

关于this指向的问题

  1. 在组件配置中(生成一个新组件),data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【VueComponent实例对象】
  2. 在new Vue(options)配置中(生成一个Vue实例对象),data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象】。

关于VueComponent与Vue实例对象的关系

一个重要的内置关系:VueComponent.prototype.__proto__ === Vue.prototype,这样组件实例对象(vc)可以访问到 Vue原型上的属性、方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件工程(三)——需求工程、需求开发、需求定义

目录 一、需求定义 二、需求验证 三、需求管理 1.定义需求基线 2.需求跟踪 3.变更控制 四、软件系统建模 一、需求定义 把已经分析好的需求&#xff0c;落成文档&#xff0c;把东西记录下来&#xff0c;成为《需求规格说明书》。需求定义的方法有严格定义法 以及 原型法…

Java三路快速排序

概念 三路快速排序&#xff1a; 是双路快速排序的进一步改进版本&#xff0c;三路排序算法把排序的数据分为三部分&#xff0c;分别为小于 v&#xff0c;等于 v&#xff0c;大于 v&#xff0c;v 为标定值&#xff0c;这样三部分的数据中&#xff0c;等于 v 的数据在下次递归中…

QSplitter学习笔记

QSplitter是分割窗口控件&#xff0c;并且可以拖动窗口来改变窗口的大小&#xff0c;是主界面显示时经常用到&#xff0c;本篇介绍它的交互操作。QSplitter可以容纳多个Widget&#xff0c;具有布局的特点&#xff0c;并且可以动态调整各个Widget的大小。QSplitter布局有两种方式…

前端学习第五站——CSS学习进阶篇

目录 一、选择器进阶 1. 后代选择器&#xff08;空格&#xff09; 2. 子代选择器 > 3. 并集选择器&#xff1a;&#xff0c; 4. 交集选择器&#xff1a;紧挨着 5. hover伪类选择器 6. emmet语法 7. 选择器总结 二、背景相关属性 1. 背景颜色 2. 背景图片 3. 背景…

若依框架对接LDAP

这里直接使用spring ldap实现认证。 背景在若依框架上对接LDAP 代码 引入依赖 <!-- 对接ldap --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-ldap</artifactId></dependency>…

React-Native 开发实用指南|环信学院

本文主要介绍 React-Native 的实际使用经验&#xff0c;对于想要快速入门的同学是有帮助的。 作者 | 佐玉 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 1、整体介绍 首先说&#xff0c; React-Native 用来做什么&#xff1f;传统的开发中&#xff0c;按照平…

编译原理学习笔记16——语义分析和中间代码生成1

编译原理学习笔记16——语义分析和中间代码生成116.1 中间语言16.2 常用的中间语言形式16.1 中间语言 中间语言的特点和作用 特点 独立于机器复杂性界于源语言和目标语言之间 引入中间语言的优点 使编译程序的结构在逻辑上更为简单明确便于进行与机器无关的代码优化工作易于移…

力扣刷题|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

LeetCode 110.平衡二叉树 题目链接&#x1f517; LeetCode 110.平衡二叉树 思路 递归三部曲分析&#xff1a; 明确函数的形参和返回值 参数&#xff1a;当前传入结点 返回值&#xff1a;以当前传入结点为根节点的树的高度 那么如何标记左右子树是否差值大于1呢&#xff…

3、SpringJdbcTemplate声明式事务

JdbcTemplate基本使用 01-JdbcTemplate基本使用-概述(了解) JdbcTemplate是spring框架中提供的一个对象&#xff0c;是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如&#xff1a;操作关系型数据的JdbcTemplate和HibernateTemplate&…

在Anaconda中安装pytorch的详细步骤+PyCharm环境配置

前言 深度学习小白一枚&#xff0c;自己的笔记本配置如下&#xff1a; 显卡&#xff1a;NVIDIA GeForce MX150&#xff08;非常垃圾的笔记本显卡&#xff09;固态硬盘 256GCPU&#xff1a;lntel Core™i7-8550UWindows&#xff1a;Windows 11家庭中文版 其他配置&#xff1a;…

代驾app开发开发搭建,代驾系统软件源码

在当下移动互联网发展的今天&#xff0c;大家对于生活的追求更加的趋向于其便捷性&#xff0c;这使得各种各样app被开发出来&#xff0c;出现在我们的生活之中。现在就把近期比较火的代驾app开发开发搭建的一些方案介绍一下。 代驾app产生的原因 代驾行业的快速发展&#xf…

<Java EE 进阶> Spring 创建和使用

目录 1.创建Spring项目 &#xff08;1&#xff09;创建一个Maven项目 &#xff08;2&#xff09;添加 Spring 框架支持&#xff08;spring-context、spring-beans&#xff09; &#xff08;3&#xff09;添加启动类 2.存储 Bean 对象 &#xff08;1&#xff09;创建 Bean …

计算几何知识(其一)

前提 最近闲着没事就看了计算几何的一些知识 构建凸包 Incremental Construction 复杂度为O(n2)原理就是不停蚕食下一个合适的点。判断原理是&#xff0c;第X个极点和前n个极点构成的多边形会有切点S&#xff0c;T。 和这两个点的连线&#xff0c;把原先多边形分成两个区域…

【软件测试】翻了下招聘APP只会点点点,很慌......测试业务?技术?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 我猜想大伙的职业生…

从0到0.1学习 maven(二:坐标、依赖和仓库)

该文章为maven系列学习的第二篇 第一篇快速入口&#xff1a;从0到0.1学习 maven(一&#xff1a;概述及简单入门) 第二节&#xff1a;坐标、依赖与仓库坐标依赖依赖范围传递性依赖依赖调解可选依赖依赖排除归类依赖优化依赖仓库路径生成仓库分类本地仓库远程仓库快照部署至远程仓…

Day 16 Enable注解

Springboot中提供了很多Enable开头的注解&#xff0c;这些注解是冬天开启某些功能的&#xff0c;而其底层使用Import注解导入一些配置类&#xff0c;实现Bean的动态加载1 EnableAutoConfigurationTarget(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Inhe…

京东十年T8架构师手撕MySQL:手写666页核心知识,超85%问题全解

MySQL是开放源码的关系数据库管理系统&#xff0c;由于 性能高、成本低、可靠性好&#xff0c;成为现在最流行的开源数据库。 MySQL学习指南 笔记包含了3个大章节&#xff0c;13个小章节&#xff1a; 基础篇 MySQL数据类型MySQL运算符MySQL函数MySQL数据库查询语句 核心篇 …

​力扣解法汇总2319. 判断矩阵是否是一个 X 矩阵

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X 矩阵 &#…

自动化设备ERP系统对企业管理有什么好处?

随着自动化设备制造企业的快速发展&#xff0c;规模和产能的不断扩大&#xff1b;设备也不断增加、品种越来越多&#xff1b;企业信息化建设也不断发展和完善, 自动化设备ERP系统已经成为企业信息化建设的一个有机组成部分。自动化设备管理已进入信息化、数字化时代。自动化设备…

机器学习之求解无约束最优化问题方法(手推公式版)

文章目录前言1. 基础知识1.1 方向导数1.2 梯度1.3 方向导数与梯度的关系1.4 泰勒展开公式1.5 Jacobian矩阵与Hessian矩阵1.6 正定矩阵2. 梯度下降法3. 牛顿法4. 拟牛顿法5. 代码实现结束语前言 本篇博文主要介绍了机器学习里面的常见的求解无约束最优化问题的方法&#xff0c;包…