vue 局部注册插件可行? - V2EX
allzc

vue 局部注册插件可行?

  •  
  •   allzc Jun 22, 2022 2113 views
    This topic created in 1444 days ago, the information mentioned may be changed or developed.

    组件 A 里面使用了第三方插件 组件 B 里面使用了原生代码方式去做 但现在这两种方式冲突了 导致第一次加载的时候 组件 B 出问题了 因为在 main.js 中 vue.use(插件) 全局引入了 我想知道可不可以在部分组件里使用插件 这种方式没试过 只用过局部注册组件 没尝试过局部注册插件 大神指点迷津

    2 replies    2022-06-23 10:31:19 +08:00
    yangheng4922
        1
    yangheng4922  
       Jun 22, 2022
    好像 Vue.use 是直接在 prototype 上注入的 应该不能局部吧
    Ccbeango
        2
    Ccbeango  
       Jun 23, 2022
    可以实现。文档中也说了,插件通常用来为 Vue 添加全局功能。所以,当然也可以实现局部的。
    插件功能见文档: https://cn.vuejs.org/v2/guide/plugins.html
    我只用了 Vue2 做了一种测试,添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。

    在 Vue 中注册插件时通过 Vue.use()进行注册。创建子组件时,可以通过 Vue.extend()来创建 Vue 的子构造函数,内部其实时通过寄生式组合继承实现的。那么,首先通过 Vue.extend()来创建子组件,再通过子组件调用 use 方法就能实现局部注册。

    如下:
    <html>
    <head>
    <title>Hello Vue</title>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
    </head>
    <body>
    <div id="app"></div>
    <script>
    let A = Vue.extend({
    template: '<div @click="test">{{msg}}</div>',
    data() {
    return {
    msg: '我是孙子组件,点击我触发局部注册的方法$myTest'
    }
    },
    methods: {
    test() {
    this.$myTest()
    }
    }
    })

    A.use({
    install(Vue, options) {
    Vue.prototype.$myTest = function() {
    console.log('myTest...')
    }
    }
    })

    let childComp = {
    template: '<div>{{msg}}<A/></div>',
    components: {
    A
    },
    props: {
    info: String
    },
    data() {
    return {
    msg: '我是子组件'
    }
    },
    created() {
    console.log('child created')
    },
    mounted() {
    console.log('child mounted')
    }
    }

    Vue.mixin({
    data () {
    return {
    hello: 'world'
    }
    },
    created() {
    console.log('mixin parent created')
    }
    })

    let app = new Vue({
    el: '#app',
    template: `<div><h1 @click="test">{{msg}}</h1><childComp/></div>`,
    data: {
    msg: '我是父组件,点我会报错找不到'
    },
    components: {
    childComp
    },
    methods: {
    test() {
    this.$myTest()
    }
    }
    })
    </script>
    </body>
    </html>
    About     Help     Advertise     Blog     API     FAQ     Solana     5156 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 09:22 PVG 17:22 LAX 02:22 JFK 05:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86