Vue全局组件和局部组件的注册

这篇具有很好参考价值的文章主要介绍了Vue全局组件和局部组件的注册。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 组件的简介

组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树:

组件的基本使用:

创建一个Vue实例需要创建后才能使用,组件也需要进行注册后才能使用。注册组件分为全局注册和局部注册两种方式。

全局注册

1.注册全局组件

注册组件就是利用Vue.component() 方法,先传入一个自定义组件的名字,然后传入这个组件的配置

//定义一个名为 my-component 的新组件

Vue.component('my-component'),{

  //组件内容写在这里 

template:"  <lable>自己的组件</lable>  "

注:""  不支持换行,使用模板字符串支持换行 ` `

})

如上方式,就说明创建了一个自定义组件,然后可以在Vue实例挂在DOM元素中使用它。

<div id="app">

  <my-cpmponent></my-component>

</div>

<script>

//定义一个名字为my-component的组件

Vue.component('my-component',{

//组件内容写这里

template:"<lable>自己的组件</lable>"

})

//声明一个vue实例

var vm = new Vue({

el:"#app",

)}

</script>

归纳总结

  1. 创建全局组件时,应该使用Vue对象的component方法,这个方法接收两个参数。第一个字符串:表示组件名称, 第二个为一个对象:表示组件内容
  2. 组件要渲染的内容应该写在template选项中,作为其值进行处理
  3. 注册时,推荐组件名称为【小写加分隔符链接的形式】,类似于css属性名的写法
  4. 组件全局注册后,在任何vue实例中都可以使用,但前提是相关vue实例应该在注册后在声明
  5. 组件在使用时,应该以标签形式调用

2.全局组件的进阶使用

(一)组件复用性的基本体现:定义后的组件可以通过标签多次调用

<div id="app">
    <my-component></my-component><!-- 以标签形式使用组件 -->
    <my-component></my-component><!-- 以标签形式使用组件 -->
    <my-component></my-component><!-- 以标签形式使用组件 -->
    <my-component></my-component><!-- 以标签形式使用组件 -->
</div>
<script>
    // 定义一个名为 my-component 的新组件
    Vue.component('my-component', {
        //组件内容写这里
        template: "<div>这是一个全局组件</div>",
    })
    //声明一个vue实例
    var vueApp = new Vue({
        el: '#app',
    })
</script>

(二)组件的template选项

注意:组件中的template只能有一个根元素。下面的情况是不允许的:

template: `<div>这是一个全局组件</div>
            <button>hello</button>`,

如果外层有多个根元素,那么就只会渲染第一个根元素

(三)全局组件可以在其注册后创建的所有vue实例中使用

<div id="app">	<!-- 在第一个vue实例中调用全局组件 -->
    <my-component></my-component><!-- 以标签形式使用组件 -->
</div>
<div id="app1">	<!-- 在第二个vue实例中调用全局组件 -->
    <my-component></my-component><!-- 以标签形式使用组件 -->
</div>
<script>
    // 定义一个名为 my-component 的新组件
    Vue.component('my-component', {
        //组件内容写这里
        template: "<div>这是一个全局组件</div>",
    })
    //声明一个vue实例
    var vueApp = new Vue({
        el: '#app',
    });
    var vueApp = new Vue({
        el: '#app1',
    });
</script>

 文章来源地址https://www.toymoban.com/news/detail-422974.html

(四)全局组件一定要在所有vue实例创建之前注册定义

<div id="app">
    <p>我是第一个div</p>
    <my-component></my-component><!-- 以标签形式使用组件 -->
</div>
<div id="app1">
    <p>我是第二个div</p>
    <my-component></my-component><!-- 以标签形式使用组件 -->
</div>
<script>
    //声明一个vue实例
    var vueApp = new Vue({
        el: '#app',
    });
     // 定义一个名为 my-component 的新组件
     Vue.component('my-component', {
        //组件内容写这里
        template: "<div>这是一个全局组件</div>",
    })
    var vueApp = new Vue({
        el: '#app1',
    })
</script>

(四)全局组件一定要在所有vue实例创建之前注册定义

<div id="app">
    <p>我是第一个div</p>
    <my-component></my-component><!-- 以标签形式使用组件 -->
</div>
<div id="app1">
    <p>我是第二个div</p>
    <my-component></my-component><!-- 以标签形式使用组件 -->
</div>
<script>
    //声明一个vue实例
    var vueApp = new Vue({
        el: '#app',
    });
     // 定义一个名为 my-component 的新组件
     Vue.component('my-component', {
        //组件内容写这里
        template: "<div>这是一个全局组件</div>",
    })
    var vueApp = new Vue({
        el: '#app1',
    })
</script>

③组件内容中的其他选项

(一)组件中的data必须是函数

可以看出,注册组件时传入的配置和创建Vue实例差不多,但也有不同,其中一个就是data属性必须是一个函数。这是因为如果像Vue实例那样,传入一个对象,由于JS中对象类型的变量实际上保存的是对象的引用,所以当存在多个这样的组件时,会共享数据,导致一个组件中数据的改变会引起其他组件数据的改变。

而使用一个返回对象的函数,每次使用组件都会创建一个新的对象,这样就不会出现共享数据的问题来了

<body>
<div id="app">
    <p>我是第一个div</p>
    <my-component></my-component>
</div>
<script>
    Vue.component('my-component', {
        //组件内容写这里
        template: "<div>{{message}}</div>",
    })
    //声明一个vue实例
    var vueApp = new Vue({
        el: '#app',
        data:function(){
            return{
                message:'这是一个全局组件',
            }
        }
    });
</script>

 

局部注册

注册局部组件

Vue实例中有个选项components可以注册局部组件,注册后就只在该实例作用域下有效

<div id="app">
    <my-component></my-component>
</div>
<script>
    var vueApp = new Vue({
        el: '#app',
        components: {
            'my-component': {
                template: '<div>{{message}}</div>',
                data: function () {
                    return {
                        message: '这是一个局部组件',
                    }
                }
            }
        }
    });
</script>

效果演示
Vue全局组件和局部组件的注册


(一)组件中嵌套

<div id="app">
    <my-component></my-component>	
</div>
<script>
    var vueApp = new Vue({
        el: '#app',
        components: {
            'my-component': {
            	//调用该局部组件下的局部组件<next-component>
                template: '<div>{{message}}<next-component></next-component></div>',
                data: function () {
                    return {
                        message: '这是一个局部组件',
                    }
                },
                components:{
                    'next-component':{
                        template:'<div>这是局部组件下的局部组件</div>'
                    }
                }
            }
        }
    });
</script>

效果图
Vue全局组件和局部组件的注册
可以在组件的components选项中声明多个组件,在components中:每个组件都是一个键值对。键名为组件名,键值为组件内容


(二)在组件中定义子组件时,可以使用外部定义对象作为组件内容

<div id="app">
    <my-component></my-component>
</div>
<script>
    var obj1 = {
        template:`<div>我是第一个子div</div>`
    }
    var obj2 = {
        template:`<div>我是第二个子div</div>`
    }
    Vue.component('my-component',{
        template:`<div>
                    <sub1></sub1>
                    <sub2></sub2>
                  </div>`,
        components: {
            sub1:obj1,
            sub2:obj2
        }
    })
    var vueApp = new Vue({
        el: '#app',
    });
</script>

效果图
Vue全局组件和局部组件的注册


(三)组件调用时可以直接使用单标签形式

<div id="app">
<person-message></person-message>
<person-message/>
</div>

当用单标签多次调用同一组件,只会产生组件一次

 

到了这里,关于Vue全局组件和局部组件的注册的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3全局注册组件

    我们在封装组件的时候一般情况下都是在 components 文件夹下写自己的组件,然后再 views 下写对应的页面然后引入自己封装的组件,比如这样: views下的chooseArea的index.vue想要引入components下的chooseArea-src-index.vue就得这样写: 这只是个引入组件的例子,也就是说 每当我们在页面

    2024年02月12日
    浏览(41)
  • vue3中批量全局注册组件

    学习的时候顺便记录一下,用于个人学习使用vite+vue3+ts,如果想直接看批量注册全局组件的,看文章目录,直接点目录跳转即可 在vue中,我们在main.ts引入的全局注册的组件是可以不需要import导入而直接使用的。使用的时候是自己全局注册组件时的名称,而不是组件名。如下

    2024年02月04日
    浏览(38)
  • 小程序——局部组件与全局组件

    目录 前言 二、引用组件 1.局部引用 2.全局引用 3.全局引用 VS 局部引用 三、自定义组件 - 样式 1. 组件样式隔离 2. 组件样式隔离的注意点 3.修改组件的样式隔离选项

    2024年02月12日
    浏览(51)
  • 记录--封装一个通过js调用的全局vue组件

    在使用vue项目编写的时候,不可避免的会碰到需要时js api来调用组件进行显示的情况 例如饿了么element ui 的 Notification 通知、Message 消息提示等组件 虽然已经提供了,但是由于api的限制,我们只能通过特定的参数来有限的改变组件的样式 之前的文章说过可以使用 new Vue() 、

    2024年02月09日
    浏览(58)
  • 整体认识和路由配置、基础数据渲染、热榜区域实现、图片预览组件封装、认识SKU组件、通用组件统一注册全局(详情页)【Vue3】

    整体业务认识 路由配置 准备组件模板 配置路由 绑定模板测试跳转 封装接口 获取数据渲染模版 思考:渲染模版时遇到对象的多层属性访问可能出现什么问题? 模块实现整体分析 结论:两块热榜相比, 结构一致,标题title和列表内容不同 渲染基础热榜数据 1- 准备模版 2- 封

    2024年02月15日
    浏览(49)
  • uni-app:vue3 + uni-app 在微信小程序中无法使用app.component全局注册组件

    按上文中的代码执行后,会发现在微信小程序开发中全局注册的组件是无法显示的,这是uniapp的一个未解决bug, 在uniapp中出了可以通过vue实例的component方法注册全局组件外,uniapp支持另一种全局注册的方式,就是通过 easycom 扫描注册,步骤如下 easycom 的扫描流程是:通过代码

    2024年02月16日
    浏览(98)
  • Vue.js核心概念简介:组件、数据绑定、指令和事件处理

    本文介绍了Vue.js的四个核心概念:组件、数据绑定、指令和事件处理。每个概念都通过一个简单的示例进行了详细的解释。通过学习这些概念,您将能够充分利用Vue.js的强大功能,构建高效、灵活的Web应用程序。 1 组件 组件是Vue.js的核心概念之一,它允许您将UI分解为相互作

    2024年02月04日
    浏览(59)
  • uniapp注册全局组件

    有一些组件可能会被很多个页面使用到,比如说,自定义的导航栏,如果在每一个页面都引用一次就很麻烦了,这个时候可以将该组件注册为全局组件了。 第一种方法:easycom组件模式 官方描述:https://uniapp.dcloud.io/collocation/pages?id=easycom 将组件安装在项目的components目录下,并

    2024年02月16日
    浏览(37)
  • Element组件完整引入、按需引入、样式修改(全局、局部)、简单安装less以及npm命令证书过期等

    npm i element-ui -S 在 main.js 中写入以下内容: 以上代码便完成了 Element 的引入。需要注意的是,样式文件需要单独引入。 借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。 首先,安装 babel-plugin-component: npm install babel-plugin-component -D 然后,将

    2024年01月23日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包