【day 06】vue的组件

news2024/12/23 22:15:37

组件

组件就是把一个网页分割成独立的小的模块,然后通过把模块进行组合,构建成一个大型的应用
在这里插入图片描述

单文件组件 只有一个组件 html css js 都在这个文件内
非单文件组件 可有多个组件
全局注册
!! 得先注册子组件 再生成 vm实例对象 
创建子组件  
const child = Vue.extend({
      //除了 el 其他任意配置项都可以用  
      name: 'child',
      data() {
        return {
          msg: 123
        }
      },
      // 写组件的html内容 
      template: `<h1>我是child子组件</h1>`
    })

//全局注册子组件  自定义组件名  组件对象  
    Vue.component('child', child)

    const vm = new Vue({
      name: 'app',
      el: '#app',
      data() {
        return {}
      }
    })

语法糖的写法 省略 Vue.extend() 在使用 child组件时 内部会自己调用

const child = {
      name: 'child',
      data() {
        return {
          msg: 123
        }
      },
      // 写组件的html内容 
      template: `<h1>我是child子组件</h1>`
    }
   Vue.component('child', child)

view model  vm new Vue() 产生的  老大哥 管理一切 小弟 

子组件实例对象  简称 vc  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
            <child></child>
            <child></child>
            <child></child>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>

    //    得先注册子组件  再生成vm实例对象
    // 创建子组件
       const child = Vue.extend({
        // 除了el其他任意配置项都可以用
        name:'child',
        data(){
            return{
                msg:123
            }
        },
        //写组件的html内容
        template:`<h1>我是child子组件</h1>`

       })
    //    全局注册子组件  自定义组件名  组件对象
       Vue.component('child',child)
       const vm = new Vue({
           el:"#app",
           data(){
               return{
                   bool:true,
               }
           },
           methods: {
          

           }
        
       })
       console.log(vm)
   </script>
</body>
</html>

注意:子组件内 data 只能是函数 不能是对象的写法

全局注册组件 任意的组件内都可以使用此组件
我们期望 组件直供 某一个组件使用 需要使用局部注册
  new Vue({
           el:"#box",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             child
           }
        
       })
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
    <child></child>
    </div>
    <div id="box">
        <p>我现在是在box下</p>
        <child></child>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>
    const child = Vue.extend({
        name:'Child'
        data(){
            return{

            }
        },
        methods:{

        },
        template:`<h1>我是儿子组件<h1>`
    })
    // Vue.component('child',child) 关闭全局注册

       new Vue({
           el:"#app",
           data(){
               return{
                   bool:true,
               }
           },
           methods: {
          

           }
        
       })
       
       new Vue({
           el:"#box",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             child
           }
        
       })

   </script>
</body>
</html>

最好是配置上name属性 name写的是啥 浏览器工具内 组件的位置就显示啥 最好是 组件名 保持一致 首字母大写

name:'child'
自定义标签名命名
  1. 不能跟已有的标签发生冲突
  2. 子组件命名 使用时 写成
    vue2 非单文件组件为:
    components:{
    childDemo:child
    }
    会被转为 小写识别 就会报错 childdemo
    我们需要更换成 这种写法
模板的规定

vue2内
template内 只能接收一个根元素

template:
`
//这样子写会报错

我是儿子组件


我是儿子组件/

        `
  需要改成           

template:
<div> <h2>我是儿子组件</h2> <h2>我是儿子组件</h2> </div>
vue3内不存在这个问题 可以接收多个根元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
    <!-- <child></child> -->
    </div>
    <div id="box">
        <p>我现在是在box下</p>
        <child-demo></child-demo>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>
    const child = Vue.extend({
        name:'child',
        data(){
            return{

            }
        },
        methods:{

        },
        template:
        ` <div>
         <h2>我是儿子组件</h2>
         <h2>我是儿子组件</h2>   
        </div> `
    })
    // Vue.component('child',child) 关闭全局注册

       new Vue({
           el:"#app",
           data(){
               return{
                   bool:true,
               }
           },
           methods: {
          

           }
        
       })
       
       new Vue({
           el:"#box",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             childDemo:child
           }
        
       })

   </script>
</body>
</html>
组件的嵌套

全局注册

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
    <child></child>
    </div>
  
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>
    const  moLeft =  {
        name:'MoLeft',
        template:`<h2 style='float:left;background:red;'>我是左边的组件</h2>`
    }
    const child = Vue.extend({
        name:'child',
        data(){
            return{

            }
        },
        methods:{

        },
        template:
        ` 
        <div>
         <h1>我是儿子组件</h1>
         <mo-left>  </mo-left>
         </div>  
        `
    })
    Vue.component('child',child) 
    Vue.component('moLeft',moLeft) 
    new Vue({
           el:"#app",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             childDemo:child
           }
        
       })

   </script>
</body>
</html>

局部注册

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
    <child></child>
    </div>
  
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>
    const  moLeft =  {
        name:'MoLeft',
        template:`<h2 style='float:left;background:red;'>我是左边的组件</h2>`
    }
    const child = Vue.extend({
        name:'child',
        data(){
            return{

            }
        },
        methods:{

        },
        template:
        ` 
        <div>
         <h1>我是儿子组件</h1>
         <mo-left>  </mo-left>
         </div>  
        `
        ,
        components:{
           moLeft
        }
    })
    Vue.component('child',child) 
   // Vue.component('moLeft',moLeft) 
    new Vue({
           el:"#app",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             childDemo:child
           }
        
       })

   </script>
</body>
</html>

分析:
new Vue 产生的是 vm实例对象
Vue.extend() 返回的是 f VueComponent(options) //构造函数
{
this.inint(options)
}

VueComponent 构造函数 组件使用的时候 内部会执行 产出 vc实例对象 (被vm管理的小弟)

vc和vm两个人 配置差不多完全一致
子组件内 this 指向 自己的vc实例对象

单文件组件
<template>
    <div class="father">
        我是父组件
    </div>
</template>

<script>
export default{
    name:"Father",
    data(){
        return{};
    },
};
// export default{} 默认暴露  引用时 import ??? from '????'

// 分别暴露
// export const obj = {};引用时 import {obj} from '?????'
// 等价于暴露出去了
// {
//     obj
// }

// 统一暴露
// let obj = {}
// let obj1 = {}
// import {obj,obj1} from '?????'

</script>
<style lang="sass" scoped></style>

脚手架

Vue官方提供的标准化开发工具(开发平台)
可以把vue文件及相关的ess编译为可执行的html css js

安装

npm i -g @vue/cli 进行安装

搭建

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

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

相关文章

JS - 写一个简单的静态页面支持上传文件并转Base64编码

JS - 写一个简单的静态页面支持上传文件并转Base64编码 前言静态页面代码 前言 我后端有一个上传文件并判断其文件类型的功能&#xff0c;我希望拿不同的文件流进行测试&#xff0c;但是文件的请求体又得获得。拿来作为参数传递。因此写了个静态文件去获取。 静态页面代码 &…

STM32用CUBEMx生成工程, 不使用CMSIS, 自己移植freertos

目录 完整工程代码: 零. 参考 一. 外围配置 二, 放进来freertos源代码 三.修改makefile 四. 解决修改函数重定义报错 五. 让Freertos的systick工作起来 六. 验证 完整工程代码: ​​​​​​https://download.csdn.net/download/u011493332/87821404 零. 参考 正在入门…

虚拟机磁盘扩容及重新分区方法

创建虚拟机的时候&#xff0c;如果分配的磁盘过小&#xff0c;在后续的使用时可能需要进行扩容&#xff0c;在扩容后你会发现好像磁盘并没有变大&#xff0c;这时候就需要进行重新分区 一、虚拟机扩容 在将需要扩容的虚拟机关机后&#xff0c;点击VMware的菜单栏中的虚拟机&…

面试:前端安全之XSS及CSRF

一、概念&#xff1a; XSS攻击全称跨站脚本攻击(Cross Site Scripting); CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF;是一种挟制用户在当前已登录的…

合同管理系统对企业的重要性,不仅能降本增效,还能规避风险

企业管理合同有哪些通病 企业在管理合同会经常遇到在约定条款时存在空泛、笼统的情况&#xff0c;导致在实际操作时产生争议&#xff0c;没有系统化进行操作规范&#xff0c;由于签订合同的时候可能存在一些法律问题&#xff0c;如未经授权签署的合同、涉及侵犯他人权益的条款…

港联证券|北向资金为何大量买入?哪些股容易受到青睐?

北向资金由于流动情况透明且披露及时&#xff0c;一直备受投资者们的关注。那么北向资金为何大量买入&#xff1f;哪些股容易受到青睐&#xff1f;港联证券也为大家准备了相关内容&#xff0c;以供参考。 北向资金为何大量买入&#xff1f; 1、中国经济增长预期较好。这为北向…

Prettier Eslint Stylelint Husky lint-staged

关于代码格式的讨论数不胜数&#xff0c;个人认为没有绝对的对与错&#xff0c;代码只要始终遵守可读性&#xff0c;可拓展性强这两点我认为就是优秀的代码。 如果是个人项目那就没有什么问题&#xff0c;但是如果涉及到多人开发&#xff0c;就不可避免的遇到代码风格迥异&…

uni-app 中如何实现触底加载功能

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是全栈 …

队列与C++中的std::queue详解(多图超详细)

文章目录 队列&#xff08;Queue&#xff09;什么是队列队列的基本操作和应用1. 入队2. 出队3. 入队出队的复杂度和应用 类模板std::queue形参T和Container成员函数1. 元素访问2. 容量3. 队列的修改 用法示例 队列&#xff08;Queue&#xff09; 什么是队列 队列就是一种线性…

单模光纤三维模场分布动画的MATLAB实现

利用MATLAB的动画功能&#xff0c;我们可以把上一篇中绘制的三维分布图变为动画 clear close all clcV 2.4000; U 1.6453; W 1.7473;Npoint 501; Rx 5; Ry 5; x linspace(-Rx,Rx,Npoint); y linspace(-Ry,Ry,Npoint); [X Y] meshgrid(x,y); R sqrt(X.^2Y.^2);E1 …

Android自定义View:超过最大高度时支持滚动并且解决滑动冲突的TextView

VerticalScrollTextView&#xff1a;超过最大高度时支持滚动并且解决滑动冲突的TextView 正如标题所说&#xff0c;这个自定义TextView在它的行数超过最大行数或是高度超过最大高度限制时&#xff0c;会将TextView设置为可纵向滑动的状态&#xff0c;如果没有超过限制&#xf…

python 的APScheduler配置的定时任务会被Miss掉

背景 python 的APScheduler配置的定时任务会被Miss掉&#xff0c;经常在控制台收到一些Miss的告警信息&#xff0c;就觉得是任务太多导致的&#xff0c;为了定位到具体的原因&#xff0c;看了一些源码&#xff0c;了解到了定时任务的6大模块的协同工作模式。异常信息及来源 异…

01.GATK人种系变异最佳实践SnakeMake流程:WorkFlow简介

<~生~信~交~流~与~合~作~请~关~注~公~众~号生信探索> 学习的第一个GATK找变异流程&#xff0c;人的种系变异的短序列变异&#xff0c;包括SNP和INDEL。写了一个SnakeMake分析流程&#xff0c;从fastq文件到最后的vep注释后的VCF文件&#xff0c;关于VCF的介绍可以参考上一…

Windows 安装 GCC

文章目录 GCC 是什么&#xff1f;GCC 和 gcc 什么关系&#xff1f;Windows 安装 GCC选型下载安装配置环境变量验证 参考文献 GCC 是什么&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是一个开源的编译器套件&#xff0c;由 GNU 项目开发和维护。 GNU 编译…

悠可集团再获金鼠标3项大奖,自研营销工具助推全渠道数字营销

5月19日,第14届金鼠标数字营销大赛评选结果揭晓,悠可集团斩获3项大奖,其中悠可集团被评为“年度数字营销杰出代理商”,悠可DTC团队自主研发的智能广告投放引擎Turbo Media及点正科技申报的KOL优先自动化工具均荣获“年度最佳数字营销工具”奖项。 据主办方介绍,本届金鼠标数字营…

java基础 - jvm 堆、栈、方法区 java 内存模型

一、 概览 在进入主题前&#xff0c;我们先了解一些相关的知识&#xff0c;方面后面对运行时数据区进行分类。 进程中&#xff0c;有很多数据是多线程之间共享的&#xff0c;线程在执行时&#xff0c;会先从主存中读取数据&#xff0c;然后复制一份到高速缓存中&#xff0c;当…

【Docker容器】Docker安装Kibana详细步骤(看完这一篇就够啦!)

前言 安装Kibana的版本一定要跟ElaticSearch的版本是一样的&#xff0c;这样才不会容易出问题。 安装ElasticSearch请点击以下链接前去学习。 【Docker容器】Docker安装ElasticSearch详细步骤(看这一篇就够啦&#xff01;) 安装 1.访问镜像官网 https://hub.docker.com/ 搜索…

Java的内存模型(Java Memory Mode,JMM)

并发编程模型的两个关键问题 线程之间如何通信及线程之间如何同步。 线程之间如何通信&#xff1a;共享内存&#xff0c;消息传递线程之间如何同步通信是指线程之间以何种机制来 交换信息同步是指程序中用于控制不同线程间 操作发生相对顺序 的机制在共享内存的并发模型里&a…

【PHP图片托管】免费CFimagehost图床源码搭建私人图床 - 无需数据库

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

C#入门:编写运行第一个Windows窗体应用程序Helloworld_WinForm

下载及安装Visual Studio的链接&#xff0c;具体见C#入门&#xff1a;编写运行第一个C#程序Helloworld 目录 下载.NET桌面开发组件创建新项目添加控件编辑程序运行查看效果补充 下载.NET桌面开发组件 Visual Studio中需下载安装.NET桌面开发组件。 创建新项目 创建项目&…