首页 > 其他分享 >Vue 非单文件组件

Vue 非单文件组件

时间:2024-03-14 19:33:06浏览次数:22  
标签:school Vue 注册 非单 student 组件 hello

概述

  Vue 非单文件组件的创建与使用。

知识点

  •   组件的定义 :组件是能实现某个功能或具有某种属性的代码和资源集合。
  •   创建非单文件组件需要3个步骤:
    • 创建组件
    • 注册组件
    • 使用组件

创建组件

  使用Vue.extend(options)创建,格式与new Vue时几乎一样,但是这里有两点要注意;

  1. 不需要写el,因为组件是可复用的,不能固定在某一容器内。
  2. data必须写成函数,如果写成对象,这样组件复用时会引用同一个数据,所以只能写成函数形式,不同的组件data数据才会互不干扰。
  3. 如下图创建了2个组件:school 组件和student组件
     1  //创建school组件
     2     const school =Vue.extend({
     3         template:`<div>
     4             <h2>学校:{{schoolName}}</h2>
     5             <h2>地址:{{address}}</h2>
     6             </div>`,
     7         data(){
     8             return{
     9                 schoolName:'城西小学',
    10                 address:'南京市鼓楼区'
    11             }
    12             
    13         }
    14     });
    15     //创建student 组件
    16     const student =Vue.extend({
    17         template:`<div>
    18             <h2>学生:{{studentName}}</h2>
    19             <h2>年龄:{{age}}</h2>
    20             <h2>成绩:{{score}}</h2>
    21             <button @click=add>请点击我,成绩加一</button>
    22             </div>`,
    23         data(){
    24             return{
    25                 studentName:'李在容',
    26                 age:14,
    27                 score:56
    28             }
    29         },
    30         methods:{
    31             add(){
    32                 this.score++;
    33             }
    34         }
    35     });

     

注册组件

  • 注册局部组件
    • 在new Vue中使用components选项实现组件局部注册。
    • 如下图,我们在容器root 和root2上注册了相同的局部组件。
      var vm=new Vue(
              {
                  el:'#root',
                  //注册局部组件
                  components:{
                      xuexiao:school,
                      xuesheng:student
                  }
              }
          )
          var vm2=new Vue(
              {
                  el:'#root2',
                  //注册局部组件
                  components:{
                      xuexiao:school,
                      xuesheng:student
                  }
              }
          )

       

  • 注册全局组件
    • 使用Vue.component(组件名,组件)。
    • 如下图, 定义了一个组件,然后注册成全局组件。
       1  //创建hello组件
       2      const hello =Vue.extend({
       3         template:`<div>
       4             hello
       5             </div>`,
       6         data(){
       7             return{
       8                 msg:'我是hi组件',
       9             }
      10         },
      11         methods:{
      12             add(){
      13                 this.score++;
      14             }
      15         }
      16     });
      17     //注册全局组件
      18     Vue.component('hello',hello);

       

使用组件

  • 如下代码: 创建了3个组件student, school , hello组件
  • student 和 school组件被注册成局部组件,hello组件注册成全局组件。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body>
        <div id="root" style="border: 1px solid yellow; margin-top: 50px;">
            <!-- 编写组件标签 -->
            我使用的是局部组件
            <xuexiao></xuexiao>
            <hr>
            <xuesheng></xuesheng>
        </div>
        <div id="root3" style="border: 1px solid rgb(17, 0, 255); margin-top: 50px;">
            使用全局组件
            <hello></hello>
        </div>
        <div id="root2" style="border: 1px solid red; margin-top: 50px;">
            <!-- 编写组件标签 -->
            我使用的是局部组件
            <xuexiao></xuexiao>
            <hr>
            <xuesheng></xuesheng>
        </div>
       
    </body>
    <script type="text/javascript">
        Vue.config.productionTip=false;//阻止Vue在启动时生成生产提示
        //创建school组件
        const school =Vue.extend({
            template:`<div>
                <h2>学校:{{schoolName}}</h2>
                <h2>地址:{{address}}</h2>
                </div>`,
            data(){
                return{
                    schoolName:'城西小学',
                    address:'南京市鼓楼区'
                }
                
            }
        });
        //创建student 组件
        const student =Vue.extend({
            template:`<div>
                <h2>学生:{{studentName}}</h2>
                <h2>年龄:{{age}}</h2>
                <h2>成绩:{{score}}</h2>
                <button @click=add>请点击我,成绩加一</button>
                </div>`,
            data(){
                return{
                    studentName:'李在容',
                    age:14,
                    score:56
                }
            },
            methods:{
                add(){
                    this.score++;
                }
            }
        });
       
        var vm=new Vue(
            {
                el:'#root',
                //注册局部组件
                components:{
                    xuexiao:school,
                    xuesheng:student
                }
            }
        )
        var vm2=new Vue(
            {
                el:'#root2',
                //注册局部组件
                components:{
                    xuexiao:school,
                    xuesheng:student
                }
            }
        )
        var vm3=new Vue(
            {
                el:'#root3',
               
            }
        )
         //创建hello组件
         const hello =Vue.extend({
            template:`<div>
                hello
                </div>`,
            data(){
                return{
                    msg:'我是hi组件',
                }
            },
            methods:{
                add(){
                    this.score++;
                }
            }
        });
        //注册全局组件
        Vue.component('hello',hello);
    </script>
    </html>

     

效果图

  • 使用上面的代码执行后的效果如下
  • 如下图,虽然root和root2使用了相同的组件,但是每个组件互不影响。第一个组件里的年龄是59,第二个组件的年龄是56:

     

     

  

 

标签:school,Vue,注册,非单,student,组件,hello
From: https://www.cnblogs.com/smallstone/p/18069052

相关文章

  • 【Docker】-- 使用docker部署Springboot+vue项目到虚拟机
    虚拟机系统:CentOS7连接虚拟机工具:MobaXterm以下在安装好虚拟机和docker基础上操作。安装docker:【Docker】--如何安装docker-CSDN博客一、部署Mysql1、安装mysqldocker中执行:dockerrun-d\--namemysql\-p3306:3306\-eTZ=Asia/Shanghai\-eMYSQL_......
  • vue中sass与SCSS的区别
    在Vue中,通常使用SCSS(SassyCSS)而不是Sass来编写样式。SCSS是Sass的一种语法扩展,提供了更多的功能和灵活性,因此在Vue项目中更常见。下面是Sass和SCSS之间的主要区别:1.**语法**:-Sass使用严格的缩进来表示层级关系,不使用花括号和分号。-SCSS类似于普通的CSS语法,使用花括号......
  • 【前端Vue】Vue从0基础完整教程第2篇:day-08【附代码文档】
    Vue从0基础到大神学习完整教程完整教程(附代码资料)主要内容讲述:vue基本概念,vue-cli的使用,vue的插值表达式,{{gaga}},{{if(obj.age>18){}}},vue指令,综合案例-文章标题编辑vue介绍,开发vue的方式,基本使用,如何覆盖webpack配置,目录分析与清理,vue单文件组件的说明,vue通......
  • 【Vue3】element-plus按需自动导入的配置 以及icon不显示的解决方案
    首先需要安装unplugin-vue-components,unplugin-auto-import,unplugin-icons三款插件。npminstall-Dunplugin-vue-componentsunplugin-auto-importunplugin-icons然后vite.config.js里加入下面的配置:import{defineConfig}from"vite";importVuefrom"@vitejs/plug......
  • 低代码与Vue3:重塑软件开发的未来
    随着技术的不断进步,软件开发领域正经历着一场革命性的变革。在这场变革中,低代码平台和Vue3框架扮演着举足轻重的角色。本文将深入探讨低代码与Vue3的结合如何为软件开发带来前所未有的便利和效率。低代码平台:简化开发过程低代码平台是一种允许开发者通过图形化界面和预构建......
  • Android 桌面小组件使用
    原文:Android桌面小组件使用-Stars-One的杂货小窝借助公司上的几个项目,算是学习了Android桌面小组件的用法,记下踩坑记录基本步骤1.创建小组件布局这里需要注意的事,小组件布局里不能使用自定义View,只能使用原生的组件,比如说LinearLayout,TextView,连约束布局都不能使......
  • 若依(ruoyi-vue)后端部署windows系统
    一、下载idea并破解,防止时间久了没法打开访问IDEA官网,下载IDEA2023.2.3版本的安装包,下载链接如下:https://www.jetbrains.com/idea/download/卸载旧版本,安装新版本弹框会提示选择安装路径,我这里直接选择的默认安装路径C:\ProgramFiles\JetBrains\IntelliJIDEA......
  • vue中router页面之间参数传递,params失效,建议使用query
    vue中router页面之间参数传递,params失效,建议使用query简介:本文讲解vue中router页面之间参数传递,params失效,建议使用query。在vue中有一个router功能,他可以用来页面之间的参数传递,他有两种方式一种是params方式,一种是query方式,但是params方式特别容易导致参数的丢失问......
  • Vue — keep-alive详解
    当使用<keep-alive>标签包裹组件时,Vue.js会将这个组件缓存起来,而不是每次重新创建和销毁。这意味着组件的状态、数据和生命周期钩子函数都得以保留,以便在下次被激活时能够立即恢复到之前的状态。<keep-alive>的主要作用是优化组件的性能和用户体验,尤其适用于频繁切换或重复访......
  • 问题记录:Vue3的watch,如何做到在监听值没变化的情况下调用相关函数去请求接口?
    一般来说Vue的watch属性只在监听到值发生变化了,才会去执行相关代码。可是最近在做项目(Vue3+TS+Vite)的时候,遇到了这种情况:标题如图所示:Modal是在父组件里写的,Modal里的折线图是在子组件里写的。点击按钮后会获取到pid和vid的值传给子组件。子组件通过watch属......