美文网首页vue收藏
Vue.extend()用法

Vue.extend()用法

作者: 落墨诗卷 | 来源:发表于2022-01-29 14:40 被阅读0次

    应用场景:

    在 vue 项目中,初始化的根实例后,所有页面基本上都是通过 router 来管理,组件也是通过 import 来进行局部注册,所以组件的创建不需要去关注,相比 extend 要更省心一点点。但是这样做会有几个缺点:

    • 组件模板都是事先定义好的,如果我要从接口动态渲染组件怎么办?
    • 如果没有插槽,需要在某个节点挂载东西
    • 所有内容都是在 #app 下渲染,注册组件都是在当前位置渲染。如果我要实现一个类似于 window.alert() 提示组件要求像调用 JS 函数一样调用它,该怎么办?
      这时候,Vue.extend + vm.$mount 组合就派上用场了。

    基础用法:

    Vue.extend( options )
    参数:{Object} options
    用法:使用基础 Vue 构造器,创建一个“子类”。参数是一 个包含组件选项的对象;
    data 选项是特例,需要注意: 在 Vue.extend() 中它必须是函数;

    <div id="point"></div>
    
    import Vue from 'vue'
    
    //创建构造器
    var Profile = Vue.extend({
        template: '<p>{{firstName}} {{lastName}}</p>',
          data: function () {
            return {
              firstName: "司命",
              lastName: "玄水",
            };
          },
    })
    
    //一般在这里可以使用
    mounted() {
        
        let ele = this.$el.querySelector("#point")
        //挂载到元素上
        new Profile().$mount(ele)
    }
    

    第二种写法

    // 1. 定义一个vue模版 
    let  tem ={
        template:`<p>{{firstName}} {{lastName}} aka {{alias}}</p>`,
        data:function(){    
        return{    
            firstName:'Walter',   
            lastName:'White',    
            alias:'Heisenberg'
        }
    }
    
    // 2. 调用
    const TemConstructor = Vue.extend(tem) 
    let ele = this.$el.querySelector("#point")
    new TemConstructor({el: ele}) // 生成一个实例,并挂载
    

    注意事项

    • new Profile().$mount(ele)等同于new TemConstructor({el: ele})

    • 如果有警告,在vue.config.js导入下面这个

      module.exports = {
          runtimeCompiler: true,
      }
      

    相关文章

      网友评论

        本文标题:Vue.extend()用法

        本文链接:https://www.haomeiwen.com/subject/bmxfkrtx.html