写点什么

这里有本 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:36953

评论

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

从专家系统到机器学习:人工智能核心概念的历史演进与发展脉络

测吧(北京)科技有限公司

测试

Linux_进程理解、状态与优先级(详细版)

不在线第一只蜗牛

Linux 运维 服务器

鸿蒙网络编程系列20-解决web组件加载网页白屏示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

鸿蒙网络编程系列12-使用Request部件下载文件到本地示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

鸿蒙网络编程系列19-获取网络连接信息并选择一种绑定到应用示例

长弓三石

DevEco Studio 开发实例 网络与连接

数据与特征在AI模型中的作用:如何通过实际问题优化机器学习模型

测吧(北京)科技有限公司

测试

如何从真实数据中挑选高质量数据:提升模型性能的关键技巧

测吧(北京)科技有限公司

测试

【架构与设计】常见微服务分层架构的区别和落地实践

京东科技开发者

由云智慧发起的《数字政府统一运维 第1部分:运维平台建设指南》团标正式发布

云智慧AIOps社区

标准化 运维‘ 智能运维AIOps

模型训练的科学基础:训练集、验证集与测试集的区别与应用策略

测吧(北京)科技有限公司

测试

鸿蒙网络编程系列23-实现一个基于鸿蒙API的HTTP服务器

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

自学习与数据闭环:构建稳定机器学习模型的核心技术

测吧(北京)科技有限公司

测试

鸿蒙网络编程系列18-Web组件加载网页的四种方式示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

鸿蒙网络编程系列22-Web组件文件上传示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

Qwik-能帮你移出项目中99%的JS代码

天翼云开发者社区

SSR Qwik.js

鸿蒙网络编程系列16-获取Wifi信息示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

鸿蒙网络编程系列17-网络状态监测示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

SD-WAN最低需要多少带宽?带宽计算方法

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商 SDWAN SD-WAN国际专线

如何构建高效的训练数据集:机器学习模型质量提升的最佳实践

测吧(北京)科技有限公司

测试

鸿蒙网络编程系列14-WebSocket客户端通讯示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

鸿蒙网络编程系列15-域名解析示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

鸿蒙网络编程系列24-Web组件与应用互操作示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

MySQL性能优化浅析及线上案例

京东科技开发者

Amazon Q Developer 实践:零基础创建贪吃蛇游戏

亚马逊云科技 (Amazon Web Services)

人工智能 生成式人工智能 Amaozn Q

从零到一:如何通过自学习机制确保模型的稳定性与数据质量

测吧(北京)科技有限公司

测试

一图了解华为开发者空间,领取你的专属云主机

华为云开发者联盟

鸿蒙 云主机 GaussDB 昇腾

鸿蒙网络编程系列13-使用Request部件上传文件到服务端示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

鸿蒙网络编程系列21-使用HttpRequest上传任意文件到服务端示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

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