惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
爱范儿
爱范儿
量子位
N
Netflix TechBlog - Medium
博客园 - 聂微东
博客园 - Franky
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC

博客园 - 匡匡

Vue 父子组件通信方式 WebClient 指定出口 IP IIS8 下 JS, CSS 等静态文件出现 500 错误 使用 ffmpeg 转换 mov 视频 使用 ildasm 和 ilasm 修改程序集的的引用信息 2020-01-08 工作日记:无题 .Net Core 程序集管理说明(加载) .NET CORE 动态加载 DLL 的问题 ASP.NET 后台 COOKIE 的设置 使用 sql server 默认跟踪分析执行的 SQL 语句 Nginx深入详解之upstream分配方式 使用 HttpWebRequest 类做 POST 请求没有应反 webpack 里的 import, exports 实现原理 使用 pdf.js 查看发票时,显示不了台头和印章的解决办法 Flex 布局里 input 宽度最小 150px 的问题, 浏览器 BUG? 使用像素单位设置 EXCEL 列宽或行高 sweetalert 快速显示两个提示, 第二个显示不出的问题 加权轮询和加权随机算法 在 Docker 中部署 ASP.NET CORE 应用
Vue: 组件扩展
匡匡 · 2021-05-20 · via 博客园 - 匡匡

在 Vue 扩展一个组件,有几种方式:

全局混入

Vue.mixin({

});

全局混入,只能定义 Vue 组件生命周期的属性或方法, 定义其他属性或方法不生效,如:

Vue.mixin({
    methods: {

    },
    created: function() {

    },
    updated: function() {

    }
});

如果组件本身自己定义了 add 方法,则会调用组件本身的 add 方法,而不会调用这个全局混入的 add 方法。

如果混入生命周期的方法,如 updated, destory 等,组件本身的这些方法会执行, 然后再执行混入的这些方法。

组件混入

组件混入,是指把功能注入到指定的组件,可以先把通用功能提取出来,然后再注入到需要的组件上去:

// mixin.js
const mixin = {
    methods: {
        getSelectedData: function() {
            // 
        },

        deleteData: function() {
            //
        }
    }
}

// Vue Component
import mixin from './mixin.js'
export default {
    mixins: [ mixin ] // 指定混合的内容
}

全局混入和组件混入规则都是一样的。

混入总结

为什么要叫混入,而不叫扩展,是因为却实不是扩展了组件的对象,反而有点和 JavaScript 中对象的 原型链 一样, 当 Vue 框架在为某个事件调用指定的方法时,首先会检查组件本身是否有此方法,如果没有就检查组件混入信息,没有找到对应的方式再去全局混入信息中查找。 组件生命周期的方法,则混入的方法和组件本身的方法都会被调用。

组件扩展

Vue 框架为组件提供了另一种扩展, extends, 这种方式就是真的把两个对象的信息合并,组成新组件的内容:

export default {
    extends: Button,

    methods: {
        // 重写相应的方法
    }
}

如果继承了对象,只需要重写对应的方法,则可以创建一个 js 文件,直接按上面的方式继承并重写相关的方法,如果需要修改界面,有两种方式:

  1. 创建一个 vue 文件,并编写相应的 template 标签, 这样整个组件的 UI 都会被替换。
  2. 创建 JS 文件,继承组件,然后在 created 事件里通过 js 代码来修改 UI。

总结

看起来不太那么面像对象