Vue混合


gitHub地址: https://github.com/manlili/vue_learn里面lesson13

 

一 定位

混合以一種靈活的方式為組件提供分布復用功能。混合對象可以包含任意的組件選項。當組件使用了混合對象時,混合對象的所有選項將被“混入”組件自己的選項中。

實際上,我也沒搞懂這句話,先研究再說,放個一年也許就自己慢慢懂了,時間這玩意可以發酵

 

二 定義

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Vue混合--定義</title>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    </head>
    <body>
        <script type="text/javascript">
            var myMinxin= {             //第一步,創建一個混合數據
                created: function () {
                    this.hello();
                },
                methods: {
                    hello: function () {
                        alert('你好');
                    }
                }
            }
            
            var myComponent = Vue.extend({    //將混合注冊到Vue
                mixins: [myMinxin]
            })
            
            new myComponent();    //實例化這個混合
        </script>
    </body>
</html>

上面代碼,彈出:

 

三 混合與Vue同名沖突

混合對象與組件包含同名選項時,這些選項將以適當的策略合並。例如,同名鈎子函數被並入一個數組,因而都會被調用。另外,混合的鈎子將在組件自己的鈎子之前調用。

同名鈎子函數沖突,代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Vue混合--同名沖突</title>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    </head>
    <body>
        <script type="text/javascript">
            var myMinxin= {             //第一步,創建一個混合數據
                created: function () {
                    this.hello();
                },
                methods: {
                    hello: function () {
                        alert('你好');
                    }
                }
            }
            
            var myComponent = Vue.extend({    //注意Vue的created與minxin的created重合,這里將先執行minxin的created
                created: function () {
                    alert('我是Vue的created');
                },
                mixins: [myMinxin]
            })
            
            new myComponent();    //實例化這個混合
        </script>
    </body>
</html>

先彈出:

再彈出:

 

 值為對象同名沖突,代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Vue混合--同名沖突</title>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    </head>
    <body>
        <script type="text/javascript">
            var myMinxin= {             //第一步,創建一個混合數據
                created: function () {
                    this.hello();
                    this.nono();
                },
                methods: {
                    hello: function () {
                        alert('你好1');
                    },
                    nono: function () {
                        alert('nono1');
                    }
                }
            }
            
            var myComponent = Vue.extend({     //methods中對象沖突,只顯示Vue實例中的方法
                created: function () {
                    this.hello();
                    this.nono();
                },
                mixins: [myMinxin],
                methods: {
                    hello: function () {
                        alert('你好2');
                    },
                    nono: function () {
                        alert('nono2');
                    }
                }
            })
            
            new myComponent();    //實例化這個混合
        </script>
    </body>
</html>

輸出如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM