Vue全局组件与局部组件详解

本文主要介绍了vue组件之全局组件与局部组件的使用详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。

组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以是原生 HTML 元素的形式,以is特性扩展。个人认为就是一个可以重复利用的结构层代码片段。

全局组件注册方式:Vue.component(组件名,{方法})

eg:

  

Vue.component("my-component",{ template:"

我是全局组件"});new Vue({ el:"#app"});new Vue({ el:"#app1"})

登录后复制

渲染结果:

立即学习“前端免费学习笔记(深入)”;

  

我是全局组件

  

我是全局组件

登录后复制

这里需要注意:

1.全局组件必须写在Vue实例创建之前,才在该根元素下面生效;

eg:

  

  

new Vue({ el: "#app" }); Vue.component("my-component", { template: "

我是全局组件" }); new Vue({ el: "#app1" })

登录后复制

这样只会渲染app1根元素下面的,并不会渲染app根元素下面的,并且会报错。

2.模板里面第一级只能有一个标签,不能并行;

  

new Vue({ el: "#app" }); Vue.component("my-component", { template: "

我是全局组件" + "

我是全局组件内标签" }); new Vue({ el: "#app1" })

登录后复制

这样子会报错,并且只会渲染第一个标签h1;我们应该这样子写:

  

new Vue({ el: "#app" }); Vue.component("my-component", { template: "

我是全局组件

" + "我是全局组件内标签" }); new Vue({ el: "#app1" })

登录后复制

局部组件注册方式,直接在Vue实例里面注册

eg:

  

new Vue({ el: "#app1", components:{ "child-component":{ template:"

我是局部组件" } } });

登录后复制

局部组件需要注意:

1.属性名为components,s千万别忘了;

2.套路比较深,所以建议模板定义在一个全局变量里,代码看起来容易一点,如下:(模板标签比较多的时候,这样子写更加简洁规整)

  

var child={ template:"

我是局部组件" }; new Vue({ el: "#app1", components:{ "child-component":child } });

登录后复制

关于组件中的其他属性,可以和实例中的一样,但是data属性必须是一个函数:

eg:

  

var child={ template:"

登录后复制

显示结果:

Vue全局组件与局部组件详解

全局组件和局部组件一样,data也必须是一个函数:

  

Vue.component("my-component",{ template:"

登录后复制

显示结果:

Vue全局组件与局部组件详解

当使用 DOM 作为模板时 (例如,将el选项挂载到一个已存在的元素上),你会受到 HTML 的一些限制,因为 Vue 只有在浏览器解析和标准化 HTML 后才能获取模板内容。尤其像这些元素

,,,限制了能被它包裹的元素,而一些像这样的元素只能出现在某些其它元素内部。

自定义组件被认为是无效的内容,因此在渲染的时候会导致错误。变通的方案是使用特殊的is属性:

eg:

登录后复制   Vue.component(“my-component”,{ template:”

{{message}}”, data:function(){ return { message:”hello world” } } }); new Vue({ el:”#app1″ })

渲染结果为:

Vue全局组件与局部组件详解

对于全局与局部的作用域问题,我们可以这样理解,只要变量是在组件内部用的,这些变量必须是组件内部的,而在外部html结构中引用的变量,都引用的是该挂载下的实例里面的变量

eg:

Vue.component("my-component",{ template:"

登录后复制

弹出框显示:我是局部

Vue中所谓的全局指的是该挂载下的区域;

下面这种做法是错误的,按我的想法觉得应该会弹出:我是全局,但是却报错,也就是说组件处于全局下不可以添加默认事件,要用全局的事件函数,必须父子通信

Vue.component("my-component",{ template:"

登录后复制

额外话题:

1.函数return后面必须跟返回的内容,不能换行写

eg:

Vue全局组件与局部组件详解

下面这种写法不会返值回来:

Vue全局组件与局部组件详解

2.Vue和小程序等一样,采用es6的函数写法,this指向是不一样的

    

new Vue({ el:"#app1", methods:{ f:function(){ console.log(this) }, f1:()=>{ console.log(this) } }})

登录后复制

结果:

第一个this指的是Vue实例

第二个this指的是Window

Vue全局组件与局部组件详解

由于它和小程序不一样,我发现在data里面this指的是window,在methods里面this才是Vue实例

所以建议大家用es5写吧

new Vue({  el:"#app1",  data:{that:this},})

登录后复制

Vue全局组件与局部组件详解

相关推荐:

vue组件父与子通信详解

vue组件的3种书写形式详解

以上就是Vue全局组件与局部组件详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2788789.html

(0)
上一篇 2025年3月8日 18:31:23
下一篇 2025年2月24日 14:51:03

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论