Angular 18+ 高级教程 – Angular 的局限和 Github Issues
前言
Angular 绝对有很多缺陷,Issue 非常多,workaround 非常多。
我以前至少有 subscribe 超过 20 个 Issues,几年都没有 right way 处理的。
Angular 不支持 Custom @Decorator
Angular 自己是有在用 Decorator (旧版,不是 TypeScript 5.0 后的版本) 的,但是我们可用不了。
相关 Github Issues:
Class decorator stopped working on angular@15
Custom decorators not working using AoT

Angular 不支持 PostCSS Configuration
Angular CLI 自己是有在用 PostCSS 来支持 Tailwind CSS 的。但是!它不允许我们设置。
连 postcss-preset-env 我们都设置不了。
像下图这样,办不到

相关 Github Issues:
Add postcss-preset-env to Angular build process / allow for configuring custom PostCSS plugins

而且短期没有任何计划要支持
Angular 不支持 Static Image Hash
Template
<div class="bg-img"></div>
Styles
.bg-img {
background-image: url('../../public/nana.jpg');
background-size: cover;
width: 360px;
aspect-ratio: 16 / 9;
}
ng build


两个知识点
path 换了
原本是 '../../public/nana.jpg' (我们写的时候是依据开发时的文件路径)
变成了 './media/nana-LHLWYWZO.jpg' (这是依据项目发布后的文件路径)
file 换了
原本是 nana.jpg 换成了 nana-LHLWYWZO.jpg
有了这个 hash 就可以做缓存了
结论:Angular 在 build 的时候会对 CSS background-image 做 hash 处理。
好,我们接着来看 <img> element。
Template
<img src="../../public/nana.jpg" alt="yangmi">
ng build


两个知识点:
path 没有换
Angular 没有把开发路径换成发布后的路径,如果我们不做处理会导致最终图片访问失败。

没有 hash 版本的 img
Angular 也没有创建出 hash 版本的 img。
结论:<img> element 需要我们自己处理路径和 hash,Angular 完全没有处理,CSS background-image 才有。
解决方案:通常路径可以直接写发布后的路径,hash 可以使用 hash-file.online,总之就是没有工程化了。
相关 Github Issue – Images in templates are not fingerprinted
Angular Team 没有打算去支持它,目前也没有任何 workaround (工程化的方案)。
@Directive 指令不支持 CSS
这个 Github Issue – @Directive should support styles and styleUrls properties 排在第 5 名。

组件可以封装 CSS Styles,独立一个 .css 或者 .scss 文件,这个非常方便。
指令虽然没有 Template,但它的职责是 decorate 组件或 Element。你可以用指令去 add class,但这个 class 的样式谁负责呢?
为什么不可以是指令负责?
这就是大家正在争取的 feature,虽然已经争取了 7 年 (from 2017),而且还是第 5 名,但 Angular Team 任然无动于衷...
Workaround follow Angular Material
也谈不上 workaround 吧,就是一些粗糙的手法。
作为 UI 组件库,Angular Material 自然会遇到这个问题,那它怎么弄呢?
简单 -- 全局 CSS Styles
MatRipple 是一个指令

使用方式
<button matRipple>Submit</button>
在任意一个 Element 上添加 attribute matRipple。
效果

点击后出现波纹。
MatRipple 的 CSS Styles 写在 _ripple.scss 里

咦...它们怎么连上的呢?
指令添加了 class

然后在项目的 styles.scss 里 @use @angular/material + @include mat.core

styles.scss 是全局 CSS Styles,每一个组件都会被 effect 到。
mat.core() 会把 _ripple.scss 放到全局,所以它们就连上了。
这个方案最大的问题就是无法按需打包,无论你有没有用到 MapRipple 指令,_ripple.scss 的 CSS Styles 都会被打包进项目里。
Angular 18+ 高级教程 – Angular 的局限和 Github Issues的更多相关文章
- Angular CLI 使用教程指南参考
Angular CLI 使用教程指南参考 Angular CLI 现在虽然可以正常使用但仍然处于测试阶段. Angular CLI 依赖 Node 4 和 NPM 3 或更高版本. 安装 要安装Ang ...
- angular.js高级程序设计书本开头配置环境出错,谁能给解答一下
server.jsvar connect=require('connect');serveStatic=require('serve-static');var app=connect();app.us ...
- NgRx/Store 4 + Angular 5使用教程
这篇文章将会示范如何使用NgRx/Store 4和Angular5.@ngrx/store是基于RxJS的状态管理库,其灵感来源于Redux.在NgRx中,状态是由一个包含action和reducer ...
- Siki_Unity_2-9_C#高级教程(未完)
Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...
- Pandas之:Pandas高级教程以铁达尼号真实数据为例
Pandas之:Pandas高级教程以铁达尼号真实数据为例 目录 简介 读写文件 DF的选择 选择列数据 选择行数据 同时选择行和列 使用plots作图 使用现有的列创建新的列 进行统计 DF重组 简 ...
- ios cocopods 安装使用及高级教程
CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...
- 【读书笔记】.Net并行编程高级教程(二)-- 任务并行
前面一篇提到例子都是数据并行,但这并不是并行化的唯一形式,在.Net4之前,必须要创建多个线程或者线程池来利用多核技术.现在只需要使用新的Task实例就可以通过更简单的代码解决命令式任务并行问题. 1 ...
- 【读书笔记】.Net并行编程高级教程--Parallel
一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...
- 分享25个新鲜出炉的 Photoshop 高级教程
网络上众多优秀的 Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享25个新鲜出炉的 Photoshop 高级教程,提高你的设计技巧,制作时尚的图片效果.这 ...
- 展讯NAND Flash高级教程【转】
转自:http://wenku.baidu.com/view/d236e6727fd5360cba1adb9e.html 展讯NAND Flash高级教程
随机推荐
- 浅谈地址,section,vstart
地址:地址只是数字,描述各种符号在源程序中的位置,它是源代码文件中各符号偏移文件开头的距离.由于指令和变量所占内存大小不同,故他们的偏移量参差不齐.由编译器给各符号编址,编译器给程序中各符号(变量名和 ...
- Web1.0、Web2.0 和 Web3.0 的区别
Web1.0.Web2.0 和 Web3.0 的区别主要体现在以下几个关键方面: 内容创作与交互: Web1.0:内容主要由网站所有者或少数专业人员创建,用户大多只是被动接收信息.例如,早期的雅虎.新 ...
- Day 5 - 双指针与折半搜索
双指针 本页面将简要介绍双指针. 引入 双指针是一种简单而又灵活的技巧和思想,单独使用可以轻松解决一些特定问题,和其他算法结合也能发挥多样的用处. 双指针顾名思义,就是同时使用两个指针,在序列.链表结 ...
- 有向图_节点间路径路径--python数据结构
字典创建有向图,查找图节点之间的路径,最短路径,所有路径 """ 参考文档: https://www.python.org/doc/essays/graphs/ &quo ...
- Vue 打包后自定义样式无法覆盖elementUI组件原有样式问题
Vue 打包后自定义样式无法覆盖elementUI组件原有样式问题 by:授客 QQ:1033553122 开发环境 Win 10 node-v10.15.3-x64.msi 下载地址 ...
- 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch
title: 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch date: 2024/7/24 updated: 2024/7/24 author: cmdrag ...
- Kmesh v0.4发布!迈向大规模 Sidecarless 服务网格
本文分享自华为云社区<Kmesh v0.4发布!迈向大规模 Sidecarless 服务网格>,作者: 云容器大未来. 近日 Kmesh 发布了 v0.4.0 版本,感谢社区的贡献者在两个 ...
- springboot3整合高版本spring data neo4j
本博客适用于springboo data neo4j 7.2.6版本,详情阅读官网https://docs.spring.io/spring-data/neo4j/reference/7.2/intr ...
- 假期小结3Hadoop学习
学习Hadoop是一个很好的选择,因为它是大数据处理和分析领域最流行的框架之一.Hadoop提供了可靠.可扩展的分布式数据处理能力,适用于处理大规模数据和构建可靠的数据管道. 在学习Hadoop时,以 ...
- 【Front-End】获取视频资源
需求场景: 我妈发个消息,在某某是网站上发现一个很好的视频,对我妈来说是一个有用的视频资源 但是视频网站不提供下载功能,叫我来帮她获取这个资源 一般来说可以利用一些东西来实现这个需求 这个是视频地址: ...