写点什么

这里有本 Angular 修炼秘籍送你(二)

  • 2020-01-07
  • 本文字数:1519 字

    阅读完需:约 5 分钟

这里有本Angular修炼秘籍送你(二)

开发组件期间遇到的问题

1. 使用组件的时候直接加在组件上的样式和样式类无效:

解决方案:给组件父容器上加样式或样式类,代码如下:


(左右/上下滑动可查看全部代码)


<div class="wrapper-content">   <h1>基本用法</h1>   <p-progressbar [animate]="animate" [value]="value" [maxValue]="maxValue"></p-progressbar></div>
复制代码

2. angular 样式封装

组件内部定义的样式类不影响组件外部。


采用的策略是:angular 在解析组件内部写的样式会加上_ngcontent-属性。这样不会全局污染。


打开控制台,查看 DOM 接口,在 head 标签中的 style 标签中会看到如下样式:


查看宿主元素也就是自定义的组件标签 DOM,如下图所示会加上_nghost-属性。


导致的问题是组件内部定义的样式类在宿主元素上不生效。


为解决上述为题 angualr 提供了三种样式封装策略。需要引入 ViewEncapsulation。


(左右/上下滑动可查看全部代码)


import { ViewEncapsulation } from’@angular/core’


具体方案:在元数据上加 encapsulation 属性。有下面三个值:


ViewEncapsulation. Emulated(仿真)


这是默认选项,通过 Angular 来模拟类似 Shadow DOM 的行为。不会影响全局样式。


ViewEncapsulation. Native(原生)


原先浏览器 ShadowDOM 行为。


ViewEncapsulation.None(无)


angular 无任何封装行为,会全局污染。

3. 如何给一个 DOM 节点上使用 2 个 ng-class

在 angular1.x 上只能有一个,并且只有一个生效。


Angular5 中有个替代方案如下:


[class.className]=”expression”可以写多个。


左右/上下滑动可查看全部代码


<div class="p-progress-bar" [class.p-no-animation]="!hasAnimation"[ngClass]="progressClass"></div>
复制代码

4. 如何实现接口的双向数据绑定(Two-WayData Binding)

双向数据绑定原理图:


双向绑定是由两个单向绑定组成:


模型 -> 视图数据绑定


视图 -> 模型事件绑定


Angular 2.x 及以上版本中 [] 实现了模型到视图的数据绑定,() 实现了视图到模型的事件绑


定。两个结合在一起 [()] 就实现了双向绑定。就好比[(ngModel)]。


1)在 angular1.x 中可以按照下面的方式实现接口的数据绑定,通过‘=’修饰符表示这个数据双向绑定


如下代码,定义接口的时候使用‘=’


scope: { format:  ‘=?’}
复制代码


2)在 angular2.x 以上的版本实现方式有下面两种


第一种,Input 和 output 装饰器结合使用


实现方案:


I.定义一个 Input 输入属性,定义一个 Output 输出的事件接口,名称之间形式如下:


(左右/上下滑动可查看全部代码)


@Input() stated : boolean;


@Output() statedChange = new EventEmitter();II.在内部修改 stated 的时候把这个值,把这个值通知到外部。


private toggleSwitch(): void {  this.stated = !this.stated;  this.statedChange.emit(this.stated);}
复制代码


III.使用的时候形式如下


(左右/上下滑动可查看全部代码)


<p-switch name=“state” [(stated)]=“stated”>


原理如下:


[(stated)] 可以拆分成两部分 stated 和 statedChange,[stated]用于绑定输入属性,(statedChange)用于绑定输出属性。当 Angular 在解析模板时,遇到 [(stated)] 形式的绑定语法,它会期待这个指令中会存在一个名为 stated 的输入属性和一个名为 statedChange 的输出属性。


第二种,创建类表单组件


推荐学习地址(复制链接到浏览器打开):


https://segmentfault.com/a/1190000009070500


把这个组件当中最重要的接口定义成双向数据绑定,如下方式使用:


双向数据绑定的值用[(ngModel)]=”xxx”绑定实现。


使用形式如下(就好比原生的 textarea 标签)


(左右/上下滑动可查看全部代码)


<p-spinner name="state" [(ngModel)]="value"></p-spinner >
复制代码


本转载自 Think 体验设计公众号。


原文链接:https://mp.weixin.qq.com/s/4bfahysRdH9pVST_UZ4cXg


2020-01-07 15:36762

评论

发布
暂无评论
发现更多内容

人工智能 | ChatGPT 插件开发

测试人

人工智能 软件测试

JProfiler:识别和解决Java应用程序的性能瓶颈和问题

理理

虚拟机热迁移技术介绍

天翼云开发者社区

云计算 虚拟机

选购小间距LED屏幕的技巧

Dylan

技术 分辨率 LED显示屏 led显示屏厂家 市场

华为发布会开场舞《见非凡》诠释卓越品质,Hi-Res原曲上线华为音乐

最新动态

张靓颖时隔9年华为发布会再唱《我的梦》,来华为音乐赏高燃重现

最新动态

在广袤的数据通信旷野,“伙伴+华为”体系点亮星云

脑极体

通信

魔乐开发者社区正式上线,AI开发者快来撩!

天翼云开发者社区

开发者社区 天翼云

从表级血缘、列级血缘到算子级血缘,给企业数据管理带来哪些帮助?

Aloudata

全链路数据血缘 数据血缘 数据链路 主动元数据

TDengine 首席架构师肖波演讲整理:探索新型电力系统的五大关键场景与挑战

TDengine

数据库 tdengine 时序数据库

论文解读 -TongGu

合合技术团队

科技 论文

TextIn ParseX:助力开发者解析版面元素信息

合合技术团队

科技 textin

终于!!把企业轻量级数据中台的构建路径理清了!

RestCloud

数据中台 ETL 数据管理 企业数据中台

构建安全基石:反射API与代码注入防护的集成方案

技术冰糖葫芦

api 网关 API Gateway API 文档 API 测试 pinduoduo API

鸿蒙NEXT生态应用核心技术理念:可分可合,自由流转

芯盾时代

鸿蒙 终端

如何让JS代码变的安全?

天翼云开发者社区

前端 网络安全

QLab Pro for Mac多用户协作系统

Mac相关知识分享

足球直播平台开发费和数据成本揭秘!你真的了解吗?

软件开发-梦幻运营部

相约华中科技大学,移动云技术论坛来了!NineData受邀参会并分享

NineData

移动云 NineData 华中科技大学

如何将图片转换为向量?(通过DashScope API调用)

DashVector

人工智能 数据库 大数据

通过ModelScope开源Embedding模型将图片转换为向量

DashVector

人工智能 数据库 大数据 大模型

输入一段文字,瞬间生成应用。Furion低代码平台与AI协同工作,展现出非凡的效率与精准。

天津汇柏科技有限公司

低代码 低代码平台 AI 人工智能

ChatGPT 插件开发

霍格沃兹测试开发学社

解锁数据潜力,天翼云TeleDB为企业数智蝶变添力赋能!

天翼云开发者社区

数据库 云计算 云原生 天翼云

Topaz Video AI v5.3.2激活版 mac地表最强视频无损放大修复工具

Rose

以创新保障数据安全,华为云空间亮相国家网络安全宣传周

最新动态

AI假图检测:Deepfake层出不穷,怎么才能“有图有真相”?

合合技术团队

科技 AIGC deepfake

无代码情报处理漫谈

数由科技

低代码 ETL 无代码 AI模型 情报处理

强化安全防线:融合反射API与代码注入防护的综合策略

代码忍者

API 文档 API 测试

客服测试流水线编排设计思路和准入准出应用|得物技术

得物技术

流水线 企业号2024年8月PK榜 质量平台

在线视频和音频下载软件PullTube for Mac

Mac相关知识分享

音频下载软件

这里有本Angular修炼秘籍送你(二)_语言 & 开发_Think体验设计_InfoQ精选文章