美文网首页
Vue - Vue.mixin() 和 mixins

Vue - Vue.mixin() 和 mixins

作者: ElricTang | 来源:发表于2019-11-06 09:15 被阅读0次

混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。

一. 组件选项 mixins

  • mixins选项中可以传入任意多的选项(mixins是一个数组)
    <body>
        <div id='app'></div>
        <script>
            let com = {
                created(){
                    console.log('hello');
                },
                data(){
                    return {
                        msg:'data from mixin'
                    }
                },
                methods:{
                    say(){
                        console.log('methods from mixin');
                    }
                }
            }
            new Vue({
                el:'#app',
                mixins:[com],
                created(){
                    this.say();
                    console.log(this.msg);
                }
            })
        </script>
    </body>

混入合并(当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”。)
  1. 数据对象在内部会进行递归合并(深度为1),并在发生冲突时以组件数据优先。
  2. 同名钩子函数将合并为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。
  3. 值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。

二. 全局混入 Vue.mixin()

全局注册一个混入,影响注册之后所有创建的每个 Vue 实例。插件作者可以使用混入,向组件注入自定义的行为。不推荐在应用代码中使用。

    <body>
        <div id='app1'></div>
        <div id="app2"></div>
        <script>
            Vue.mixin({
                created(){
                    let myOption = this.$options.myOption;
                    myOption && console.log(myOption);
                }
            })
            new Vue({
                el:'#app1',
                myOption:[1,2,3,4]
            })
            new Vue({
                el:'#app2',
                myOption:'hello world'
            })
        </script>
    </body>
  • 自定义了选项 myOption,并且使用全局混入添加处理器。结果每一个Vue实例都受到影响。
    全局混入

相关文章

网友评论

      本文标题:Vue - Vue.mixin() 和 mixins

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