前言

在 MDC – Material Design, Angular Material, MDC, MWC, Lit 的关系 中, 我有提到基于 MDC 的 Framework 生态有多糟糕.

但它的一些架构设计出发点确实是为了 Framework 着想的. 这篇稍微看一看这部分.

参考

Github – Integrating MDC Web into Frameworks

Codelabs – MDC-112 Web:Integrating MDC with Web Frameworks

Simple Approach

有 2 种方法可以依赖 MDC. 第一种是简单的 wrap 一层. 把 HTML, CSS, JS 封装起来做一个调用就 ok 了.

Advanced Approach

第二种方法就麻烦多了. 首先必须了解 MDC 的架构.

Foundation

所有组件都有一个底层的体验实现, 它叫 XXXFoundation

里面封装了所有 Material Design 的概念.

比如, 当 input unblur 后, 会检查 validation, 如果有 error 会添加 invalid 的 class 到 text filed 上. 这个是 Material 的体验规范.

实现代码就写在 Foundation 里面. 如果想要改这方面的逻辑就需要继承 Foundation Class 做 override.

Adapter

所有组件都有一个底层的操作 Dom 实现. 它叫 XXXAdapter

adapter 主要是给 Foundation 消费的, Foundation 负责体验逻辑, 但它会调用 adapter 去操控 Dom, 它本身并不实现和依赖如何操作 Dom.

Component (e.g. MDCTextField)

组件是最上层的, 我们平常写代码就是 new MDCTextField(bindingElement) 这样.

组件有 2 大职责

第一就是封装了 Foundation, 曝露上层接口 (作为 Foundation 的 proxy)

第二是实现 adapter

adapter 就是大量的 Dom 操作接口

Angular Material FormField

我们拿 Angular Material 源码来看就可以看出它如何实现 MDC 了.

Github – github.com/angular/components/blob/main/src/material-experimental/mdc-form-field/form-field.ts

form-field.ts 取代了 MDC 的 mdc-textfield/component.ts.

所以复用的部分是在 Foundation. Adaptor 而 component 是没有复用 MDC 的.

MDC – Work with Framework & Customize的更多相关文章

  1. log4j输出到数据库(输出自定义参数、分级保存)

    转载自:http://wallimn.iteye.com/blog/1525819 Log4J日志输出到数据库中,且保存些用户自定义的参数,如用户ID,且配置仅输出指定级别的日志.  配置文件如下:  ...

  2. windows类书的学习心得

    原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...

  3. Code First :使用Entity. Framework编程(6) ----转发 收藏

    Chapter6 Controlling Database Location,Creation Process, and Seed Data 第6章 控制数据库位置,创建过程和种子数据 In prev ...

  4. Code First :使用Entity. Framework编程(7) ----转发 收藏

    第7章 高级概念 The Code First modeling functionality that you have seen so far should be enough to get you ...

  5. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 更新关系数据

    Updating related data¶ 7 of 7 people found this helpful The Contoso University sample web applicatio ...

  6. SharePoint Framework 概述

    博客地址:http://blog.csdn.net/FoxDave 本文翻译自新出的SharePoint Framework概述介绍文章,原文地址:http://dev.office.com/sh ...

  7. Programming Entity Framework 翻译(2)-目录2-章节

    How This Book Is Organized 本书组织结构 Programming Entity Framework, Second Edition, focuses on two ways ...

  8. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块

    spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...

  9. [转]Using Entity Framework (EF) Code-First Migrations in nopCommerce for Fast Customizations

    本文转自:https://www.pronopcommerce.com/using-entity-framework-ef-code-first-migrations-in-nopcommerce-f ...

  10. 【凯子哥带你学Framework】Activity启动过程全解析

    It’s right time to learn Android’s Framework ! 前言 学习目标 写作方式 主要对象功能介绍 主要流程介绍 zygote是什么有什么作用 SystemSer ...

随机推荐

  1. QAnything AI开源的企业级本地知识库问答解决方案,致力于支持任意格式文件或数据库的问答

    QAnything AI简介 QAnything ai是一个本地知识库问答系统,旨在支持多种文件格式和数据库,允许离线安装和使用.您可以简单地删除任何格式的任何本地存储文件,并获得准确.快速和可靠的答 ...

  2. 将虚拟机跑在ceph之中

    目录 openStack对接ceph 1. cinder对接ceph 1.1 ceph创建存储池 1.2 ceph授权 1.3 下发ceph文件 1.4 修改globals文件 1.5 部署cinde ...

  3. webpack4.15.1 学习笔记(十) — 常见 loader 使用

    目录 style -loader <= css-loader <= less-loader postcss-loader file-loader url-loader html-withi ...

  4. oeasy教您玩转vim - 36 - # 插入字符

    ​ 插入字符 回忆上节课内容 正则表达式 行头行尾 ^ 意味着行开头 $ 意味着行结尾 任意字符 . 代表任意字符 [a-z] 代表任意小写字母 字符数量 * 代表 0 到任意多个前字符 + 代表 1 ...

  5. 开源!开源一个flutter实现的古诗拼图游戏

    去年(2023年)年底我初学flutter,看了一些文档和教程,想找个东西*练练手. 小时候看过一个关于历史名人儿时事迹的短片,有一集是讲*总理的,有一个细节我记得很清楚:幼年***经常要做一个游戏- ...

  6. Superviso可视化监控进程

    如果您需要同时运行多个 ThinkPHP 命令,可以在 Supervisor 中为每个命令创建一个单独的程序段.以下是示例配置,其中包含两个 ThinkPHP 命令:command1.php 和 co ...

  7. 【C3】04 工作原理

    我们已经知道了CSS是做什么的以及怎么写简单的样式这样基础的CSS, 接下来我将了解到浏览器如何获取CSS.HTML和将他们加载成网页. 前置知识: 基础计算机知识.基本软件安装.简单文件知识.HTM ...

  8. 【SpringMVC】06 转发 & 重定向

    除了快速入门的视图解析器方式处理, 我们还可以使用原生的Servlet转发方式执行 访问测试 还有重定向 访问 测试 使用SpringMVC的转发&重定向 和原生的重定向,有一点不同,MVC的 ...

  9. Jupyter Lab和Jupyter Notebook的区别

    JupyterLab与Jupyter Notebook:详细比较 简介 Jupyter Notebook是一个开源的Web应用程序,允许用户创建和共享包含实时代码.方程.可视化和解释性文本的文档.Ju ...

  10. IEEE TCDS 专刊"Embodied AI in Indoor Robotics"征稿通知

    原文地址: https://mp.weixin.qq.com/s/Z-U4EO6FCF703yMwHXAq5A 随着深度学习和强化学习在机器人学领域的迅猛发展,尤其是大型语言模型的创新进步,具身人工智 ...