🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 什么是Vue.extend? Vue.extend 返回的是一个“扩展实例构造器”,也就是预设了部分选项的Vue实例构造器。经常服务于Vue.component用来生成组件,可以简单理解为当在模板中遇到该组件名称作为标签的自定义元素时,会自动调用“扩展实例构造器”来生产组件实例,并挂载到自定义元素上。 由于我们还没有学习Vue的自定义组件,所以我们先看跟组件无关的用途 # 自定义无参数标签 我们想象一个需求,需求是这样的,要在博客页面多处显示作者的网名,并在网名上直接有链接地址。我们希望在html中只需要写`<author></author>` ,这和自定义组件很像,但是他没有传递任何参数,只是个静态标签。 我们的Vue.extend该登场了,我们先用它来编写一个扩展实例构造器。代码如下 ~~~ var authorExtend = Vue.extend({ template:"<p><a :href='authorUrl'>{{authorName}}</a></p>", data:function(){ return{ authorName:'JSPang', authorUrl:'http://www.jspang.com' } } }); ~~~ 这时html中的标签还是不起作用的,因为扩展实例构造器是需要挂载的,我们再进行一次挂载 ~~~ new authorExtend().$mount('author'); ~~~ 完整代码 ~~~ <body> <author></author> </body> <script type="text/javascript"> var authorExtend = Vue.extend({ template: "<p><a :href='authorUrl'>{{authorName}}</a></p>", data() { return { authorName: 'jdxia', authorUrl: 'http://www.baidu.com' } } }); new authorExtend().$mount('author'); </script> ~~~ 这边可以用id ~~~ <div id="author"></div> ~~~ 那么挂载就可以这样写 ~~~ new authorExtend().$mount('#author'); ~~~