首页 > 编程语言 >vue2-组件化编程

vue2-组件化编程

时间:2024-11-18 18:19:52浏览次数:1  
标签:school Vue 编程 vue2 address 组件 data options

  • 模块:向外提供特定功能的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. 局部注册
 // 创建vm
    new 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
        }
    })
    

    // 创建vm
    new Vue({
            el: "#root",
            data: {},
             components: {
                school:school,

            }
        }
    )

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


    // 创建app组件
    const app = {
        template: `
          <!--          app内调用 其余组件-->
          <div>
            <student></student>
            <school></school>
          </div>
        `,
        // 将其余组件注册给app
        components: {
            school,
            student
        }

    }


    // 创建vm
    new Vue({
            el: "#root",
            data: {},
            // 调用app组件
            template: `
              <app></app>`,
            components: {
                // 将app注册给 vue
                app

            }
        }
    )
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}
    })
    

标签:school,Vue,编程,vue2,address,组件,data,options
From: https://www.cnblogs.com/Mickey-7/p/18553357

相关文章

  • 从0开始搭建一个包含文档的组件库
    初始化项目使用vue-press作为文档框架,使用vue3+ts+vite作为组件库和测试项目框架,PnpmWorkspaces作为Monorepo项目的依赖管理工具新建一个文件夹,根据vue-press的官方文档,在根目录下安装了vue-press,同时使用vite初始化组件库项目。修改组件库项目package.json修改name字......
  • 基于Select模型的通信仿真--win32编程代码
    目录基于Select模型的通信仿真--win32编程代码编程环境服务端客户端基于Select模型的通信仿真--win32编程代码编程环境VisualC++6.0服务端#include<stdio.h>#include<string.h>#include<WinSock2.h>#pragmacomment(lib,"ws2_32.lib")intAPIENTRYWinMain(HINSTANCEh......
  • 【JAVA】Java基础—面向对象编程:类的其他特性—静态成员与方法
    在Java中,静态成员和静态方法是类的一部分,而不是类的实例的一部分。这意味着静态成员和方法可以在没有创建类的实例的情况下访问。理解静态成员和方法的概念对于Java开发至关重要,因为它们在内存管理、性能优化和设计模式中扮演着重要角色。理论知识1.静态成员静态变量:也称......
  • 【JAVA】Java基础—面向对象编程:类的其他特性—static 关键字的使用
    在Java编程中,static关键字是一个非常重要的概念,它用于定义类级别的成员,而不是实例级别的成员。理解static的使用对于编写高效、清晰和可维护的代码至关重要。在实际开发中,static关键字通常用于创建工具类、常量、单例模式以及共享数据等场景。理论知识1.static变量静态变......
  • 构建企业级 Agent 系统:核心组件设计与优化
    引言构建企业级AIAgent系统需要仔细考虑组件设计、系统架构和工程实践。本文将探讨构建稳健可扩展的Agent系统的关键组件和最佳实践。1.Prompt模板工程1.1模板设计模式fromtypingimportProtocol,Dictfromjinja2importTemplateclassPromptTemplate(Protocol......
  • 用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
    作者:玺哥超carry不要划走,这是一个让普通人增加百倍竞争力的视频!自从2023年AI火爆至今,各种文案生成、图片生成、视频生成的技术火爆全网。其中AI写代码更是今天一个震惊,明天一个颠覆。但实际做出来的东西,却好像回到80年代,一会做一个Flappybird,一会做一个横版小游戏。......
  • 用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
    作者:玺哥超carry不要划走,这是一个让普通人增加百倍竞争力的视频!自从2023年AI火爆至今,各种文案生成、图片生成、视频生成的技术火爆全网。其中AI写代码更是今天一个震惊,明天一个颠覆。但实际做出来的东西,却好像回到80年代,一会做一个Flappybird,一会做一个横版小游戏。......
  • 用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
    作者:玺哥超carry不要划走,这是一个让普通人增加百倍竞争力的视频!自从2023年AI火爆至今,各种文案生成、图片生成、视频生成的技术火爆全网。其中AI写代码更是今天一个震惊,明天一个颠覆。但实际做出来的东西,却好像回到80年代,一会做一个Flappybird,一会做一个横版小游戏。......
  • 用通义灵码从0开始打造一款App,无编程经验也可以完成
    不要划走,这是一个让普通人增加百倍竞争力的视频!自从2023年AI火爆至今,各种文案生成、图片生成、视频生成的技术火爆全网。其中AI写代码更是今天一个震惊,明天一个颠覆。但实际做出来的东西,却好像回到80年代,一会做一个Flappybird,一会做一个横版小游戏。就连网上爆火C......
  • js给同一组件同一请求的调用加锁
    我开发的一个页面,同时多次使用了同一个组件,但是这个组件一加载就会调用同一个方法,最终同时调用同一接口。但是我们后端对于同一接口的调用频率进行了限制,不允许短时间内重复提交,需要在一个时间间隔后提交才能请求成功。原代码为:onMounted(()=>{constcode=item.value.c......