Vue的全局方法

Vue的use的方法

Vue.use(vuex); Vue.use => 當使用第三方組件時,需要使用Vue.use方法;當用這個方法會默認調用裏面的install

Vue.use :可以接受對象和函數

  1. 如果use傳遞進來一個對象,那麼會默認調用這個對象中的install方法,並且將Vue這個方法傳給其第一個參數; Vue.use({install:function(_vue){}})
  2. 如果vue直接傳入一個函數,那麼Vue.use就會把這個函數當成install來執行;
<body>
    <div id="app">
        {{$store.state.count}}
    </div>
    <script src="../node_modules/vue/dist/vue.js"></script>
    <script src="../node_modules/vuex/dist/vuex.js"></script>
    <script>
        // Vue.use
        let store = new Vuex.Store({
            state:{
                count:100
            },
            mutations:{
                addCount(state){
                    state.count++;
                }
            },
            actoions:{
                // 支持異步;在項目中一般在此發送異步請求,當請求數據成功後更改state中的值;
                add({commit},payload){
                    commit("addCount",10)
                }
            }
        });
        // Vue.use(vuex);
        // Vue.use :可以接受對象和函數
        let obj = {
            install(vm){
                console.log(vm)
            }
        }
        let fn = function(vm){
            console.log(vm)
        }
        Vue.use(fn);
        // 1. 如果use傳遞進來一個對象,那麼會默認調用這個對象中的install方法,
並且將Vue這個方法傳給其第一個參數;
        // 2. 如果vue直接傳入一個函數,那麼Vue.use就會把這個函數當成install來執行;
        let vm = new Vue({
            el:"#app",
            store// 會給當前實例以及當前實例的所有子孫組件都會新增一個$store屬性;
        });      
    </script>
</body>

Vue中的mixin

Vue.mixin : 混入 把對象中的data合併到每一個組件的data中,如果和組件中的屬性重名,那麼以組件data中值爲準;
還可以把對象中的鉤子函數混入到每一個組件中,並且是先執行混入對象的鉤子函數,再執行組件自己的鉤子函數
如果不重名就是新增,如果重名,則以組件內部的屬性爲準

<body>
    <div id="app">
        {{name}}
        {{msg}}
        <button @click="add">新增</button>
        <my></my>
    </div>
    <script src="../node_modules/vue/dist/vue.js"></script>
    <script src="../node_modules/vuex/dist/vuex.js"></script>
    <script>    
        //  Vue.mixin : 把對象中的data合併到每一個組件的data中,如果和組件中的屬性重名,
      那麼以組件data中值爲準;
        // 2.還可以吧對象中的鉤子函數混入到每一個組件中,並且是先執行混入對象的鉤子函數,
再執行組件自己的鉤子函數
        /// 如果不重名就是新增,如果重名,則以組件內部的屬性爲準
        Vue.mixin({
            data(){
                return {
                    msg:"hello",
                    name:"201914"
                }
            },
            beforeCreate(){
                console.log("mixin beforeCreate")
            },
            methods:{
                add(){
                    console.log(888)
                }
            },
            mounted(){
                console.log("mixin mounted")
            }
        });
        Vue.component('my',{
            // template:"<div></div>"
            // render(h){
            //     // h==> 函數
            //     // h:第一個參數可以標籤名  對象:行間屬性   標籤的文本內容
            //     //console.log(h("h1",{class:"bar",a:1},"hello",{c:1}));
            //     // 這個函數就會返回一個虛擬的DOM,那麼vue再將這個虛擬的DOM轉成
          真實的DOM放在頁面上
            //     //console.log(h);
            //     return h("h1",{class:"bar",attrs:{id:100}},"hello");
            // }
            template:"<div>{{msg}}</div>"
        })
        let vm = new Vue({
            el:"#app",
            data(){
                return {
                    name:"珠峯"
                }
            },
            methods:{
                
            },
            beforeCreate(){
                console.log("vm beforeCreate")
            },
            mounted(){
                console.log("vm mounted")
            }
        });
        console.log(vm);      
    </script>
</body>

局部混入

mixins:[obj]

<body>
    <div id="app">
        <my></my>
    </div>
    <script src="../node_modules/vue/dist/vue.js"></script>
    <script src="../node_modules/vuex/dist/vuex.js"></script>
    <script>
        let obj = {
            data(){
                return {msg:100}
            },
            created(){
                console.log(this);// this :代表當前使用obj這個混入對象的vue實例
            }
        }
        // Vue.mixin({
        //     data() {
        //         return {
        //             msg: 100
        //         }
        //     },
        //     created() {
        //         console.log(this); // this :代表當前使用obj這個混入對象的vue實例
        //         // created:有多少個vue實例,created執行多少次,並且每次執行都會指向不同的組件實例
        //     }
        // })
        Vue.component('my', {
            data() {
                return {
                    a: 100
                }
            },
            template: "<div>{{msg}}</div>",
            mixins:[obj]
        })
        let vm = new Vue({
            el: "#app",
            data() {
                return {
                    name: "珠峯"
                }
            },
            // mixins:[obj],
            methods: {

            },
            beforeCreate() {
                console.log("vm beforeCreate")
            },
            mounted() {
                console.log("vm mounted")
            }
        });
    </script>
</body>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章