大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

评论

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

贾斯特里尼&布鲁克斯,优质葡萄酒都有甄选法则

联营汇聚

Iceberg 在袋鼠云的探索及实践

袋鼠云数栈

推荐8个提高工作效率的IntelliJ插件

风铃架构日知录

后端 开发 Java、 intellij java架构师

双币质押挖矿分红模式系统开发技术模式方案

I8O28578624

边疆水土培养边疆人才,云南大学研究团队借助昇思MindSpore提出智慧医疗创新解决方案

极客天地

易观千帆 | 2022年11月银行APP月活跃用户规模盘点

易观分析

App 手机银行 用户分析

产品更新快培训成本高?华为云会议助力企业降本增效

IT科技苏辞

华为云解锁云原生数据库发展新动能

华为云开发者联盟

数据库 后端 华为云 12 月 PK 榜

华为云桌面能为设计行业提供哪些“黑科技”?

爱尚科技

华为云助力中建一局会议上云,沟通协同更高效!

IT科技苏辞

干货|3DMax优化模型的方法有哪些?

Finovy Cloud

云渲染 3DMAX

流量与技术双重加持,小游戏迎来高速增长周期

FinFish

小游戏 小程序游戏 小程序游戏开发 微信小游戏

【PCB设计】孔间距不可忽视,小心废板!

华秋PCB

工具 PCB PCB设计

区块链NFT商城系统开发技术

薇電13242772558

区块链

消息中间件执行原理

C++后台开发

分布式 中间件 消息队列 后端开发 linux开发

贾斯特里尼&布鲁克斯葡萄酒,提升用餐仪式感

联营汇聚

火山引擎DataTester为企业降本增效:1个人也能成为一支A/B实验团队

字节跳动数据平台

大数据 AB testing实战 12 月 PK 榜

华为云桌面驱动数字内容变革,按下文娱社交行业升级加速键

爱尚科技

彪悍升级|尚硅谷Hive新版视频教程发布

小谷哥

揭秘百度智能测试在测试定位领域实践

百度Geek说

百度 测试定位 智能测试 12 月 PK 榜

贾斯特里尼&布鲁克斯酿酒专家帮您区分干红葡萄酒和甜红葡萄酒

联营汇聚

华为云会议助力中建一局视频会议数字化升级

IT科技苏辞

云原生安全系列3:5个 Kubernetes API 网络安全访问最佳实践

HummerCloud

云原生 k8s 云原生安全 kubernetes 运维

带你玩转OpenHarmony AI:基于Seetaface2的人脸识别

OpenHarmony开发者

OpenHarmony openha

TDengine 时序数据库与一汽解放携手,助力商用车智能网联

TDengine

数据库 tdengine 时序数据库

一周刷爆LeetCode,字节技术官亲码算法与数据结构刷题宝典真香

Java永远的神

程序员 数据结构 算法 LeetCode 大厂面试

华为云会议,开会就是如此简单

IT科技苏辞

华为云桌面Workspace带你走进云上办公新时代

爱尚科技

华为云桌面服务,拓宽公有云赛道,持续引领产业发展

爱尚科技

华为云桌面Workspace-企业云上办公的最优选择

爱尚科技

安全高效,华为云桌面打造全新云上办公体验!

科技怪授

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