<>mixin和extends 两者为mvc的controller
通用的成员变量(包括属性和的方法 )抽象成为一个父类 提供给子类继承 这样可以让子类拥有一些通用超呢高原变量 然而子类页可以重写父类的成员变量
整个编程思想就很面向对象 也就是继承性
mixin
当组件使用mixin对象时,所有mixin对象的选项将被“混入” 进入该组件本身的选项
mixin合并规则 mixins类型是Array 传入一个混合对象的数组
data函数返回的值对象 会以组件自身的数据为优先
钩子函数会被合并到数组中 在合适的时机会被一次调用 并在调用组件自身钩子之前被调用
如果都有methods选项且定义了实现,那么都会生效
如果对象的key相同 则只会去组件对象的键值对
demoMixin.js
export const demoMixin = { data() { return { message: "Hello DemoMixin" } },
methods: { foo() { console.log("demo mixin foo"); } }, created() { console.log(
"执行了demo mixin created"); } }
使用 mixins属性 demoMixin里面的message和foo函数都能用
<template> <div> <h2>{{message}}</h2> <button @click="foo">按钮</button> </div> <
/template> <script> import { demoMixin } from './mixins/demoMixin'; export
default { mixins: [demoMixin], data() { return { title: "Hello World" } },
methods: { } } </script> <style scoped> </style>
<>extends
extends类型是Object | Function 接收的是对象或者是函数
extends触发的优先级高相对于是队列
push(extend, mixin1, minxin2, 本身的钩子函数)
const extend = { created () { console.log('extends created') } } const mixin1 =
{ created () { console.log('mixin1 created') } } const mixin2 = { created () {
console.log('mixin2 created') } } export default { extends: extend, mixins: [
mixin1, mixin2], name: 'app', created () { console.log('created') } } 控制台输出
extends created mixin1 created mixin2 created created
子类再次声明,data中的变量都会被重写,以子类的为准
如果子类不声明,data中的变量将会最后继承的父类为准。
props中属性、methods中的方法和computed的值继承规则一样
注意extends先执行 在执行mixins2 最后执行mixins1
// 只写出子类,name = 'mixin1 name',mixins后面继承会覆盖前面的 export default { mixins: [mixin2
, mixin1], extends: extend, name: 'app' }
注意extends先执行 在执行mixins21 最后执行mixins2
// 只写出子类,name = 'mixin2 name',extends优先级高会被mixins覆盖 export default { mixins: [
mixin1, mixin2], extends: extend, name: 'app' }