440 vue混入mixins

混入:把多个组件中,公共的代码抽取,如data、methods、生命周期钩子,然后使用mixins继承。

01-混入mixin.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>

<body>
    <!-- 
        混入 mixin  => js混入式继承
        作用 : 共享功能
        混入对象: data、methods......
    -->
    <div >
        <one></one>
        <two></two>
    </div>

    <script src="./vue.js"></script>
    <script>
        // 准备一个混入对象
        const hello = {
            methods: {
                sayHello() {
                    console.log('大家好, 我系' + this.name)
                }
            }
        }

        Vue.component('one', {
            mixins: [hello],
            data() {
                return {
                    name: '春'
                }
            },
            template: `<div @click='sayHello'> 子组件 one  :  </div>`
        })

        Vue.component('two', {
            mixins: [hello],
            data() {
                return {
                    name: '马'
                }
            },
            template: `<div @click='sayHello'> 子组件  two:  </div>`
        })

        const vm = new Vue({
            el: '#app',
            data: {}
        })
    </script>
</body>

</html>

02-混入-重名.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>

<body>
    <!-- 
        混入 mixin   => js => 混入式继承
        作用 : 共享功能
        混入对象 ( data methods ,,,,)
      -->
    <div >
        <one></one>
        <two></two>
    </div>
    <script src="./vue.js"></script>
    <script>
        // 准备一个混入对象
        const hi = {
            methods: {
                sayHello() {
                    console.log('大家好,我系' + this.name)
                }
            }
        }

        Vue.component('one', {
            // 【就这个例子来说,没必要把 hi混入进来,因为hi里面只有一个sayHello方法,而这个组件里自己写了sayHello方法】
            mixins: [hi],
            data() {
                return {
                    name: '春'
                }
            },
            template: `<div @click='sayHello'> 子组件 one  :  </div>`,
            // 【混入的属性可以和组件的属性重复,两者会合并】
            methods: {
                // (1)自己组件内部有同名的方法时,就执行自己的方法;(2)需要mixins的的方法,就继承,不需要就重写
                sayHello() {
                    console.log('测试')
                }
            }
        })

        Vue.component('two', {
            mixins: [hi],
            data() {
                return {
                    name: '马'
                }
            },
            template: `<div @click='sayHello'> 子组件  two:  </div>`
        })

        const vm = new Vue({
            el: '#app',
            data: {}
        })
    </script>
</body>

</html>