如果你想立刻看到不太常见的样式修改则看官网这两篇文章

一般在组件之间传值,使用的就是Property,

  1. <demo [name]="demoName"></demo>

而Attribute绑定使用的就不太多,

  1. <tr><td [attr.colspan]="1 + 1">One-Two</td></tr>

class绑定

ngClass

  1. <some-element [ngClass]="'first second'">...</some-element>
  2. <some-element [ngClass]="['first', 'second']">...</some-element>
  3. <some-element [ngClass]="{'first': true, 'second': true, 'third': false}">...</some-element>
  4. <some-element [ngClass]="stringExp|arrayExp|objExp">...</some-element>
  5. <some-element [ngClass]="{'class1 class2 class3' : true}">...</some-element>

CSS 类会根据表达式求值结果进行更新,更新逻辑取决于结果的类型:

  • string - 会把列在字符串中的 CSS 类(空格分隔)添加进来,
  • Array - 会把数组中的各个元素作为 CSS 类添加进来,
  • Object - 每个 key 都是要处理的 CSS 类,当表达式求值为真的时候则添加,为假则移除。

绑定到 class Attribute

可以用类绑定从元素的 class Attribute 中添加和删除 CSS 类名称。

绑定到单个 CSS classlink

要创建单个类绑定,请使用前缀 class 后跟一个点和 CSS 类的名称,例如 [class.sale]=”onSale”。onSale 为真值时添加类,在表达式为假值时(undefined 除外)删除类。欲知详情,请参见样式委托部分。

绑定到多个 CSS 类

要绑定到多个类,请使用 [class] 来设置表达式 - 例如,[class]=”classExpression”,此表达式可以取如下值:

  • 用空格分隔的类名字符串
  • 以类名作为键名并将真或假表达式作为值的对象。
  • 类名的数组。

对于对象格式,Angular 会在其关联的值为真时才添加类。

对于任何类似对象的表达式(例如 object、Array、Map 或 Set,必须更改对象的引用,Angular 才能更新类列表。在不更改对象引用的情况下只更新其 Attribute 是不会生效的。

如果同一类名有多个绑定,Angular 会根据样式优先级来确定要使用的绑定。

image.png

style绑定

ngStyle

将容器元素的字体设置为表达式的结果。

  1. <some-element [ngStyle]="{'font-style': styleExp}">...</some-element>

将容器元素的宽度设置为表达式返回的像素值。

  1. <some-element [ngStyle]="{'max-width.px': widthExp}">...</some-element>

使用返回键值对的表达式来设置样式值的集合。

  1. <some-element [ngStyle]="objExp">...</some-element>

绑定到 style Attribute

可以用样式绑定来动态设置样式。

绑定到单一样式

要创建对单个样式的绑定,请使用前缀 style 后跟一个点和 CSS style Attribute 的名称,例如 [style.width]=”width”。 Angular 会将该 Attribute 设置为绑定表达式的值,这个值通常是一个字符串。(可选)你还可以添加单位扩展,例如 em 或 % ,它的值需要数字类型。

你可以用中线格式camelCase 格式编写样式 Attribute 名。

  1. <nav [style.background-color]="expression"></nav>
  2. <nav [style.backgroundColor]="expression"></nav>

绑定到多个样式

要切换多个样式,请绑定到 [style] Attribute,例如 [style]=”styleExpression” 。styleExpression 可以是如下格式之一:

  • 样式的字符串列表,例如 “width: 100px; height: 100px; background-color: cornflowerblue;”。
  • 一个对象,其键名是样式名,其值是样式值,比如 {width: ‘100px’, height: ‘100px’, backgroundColor: ‘cornflowerblue’}。

注意,不支持把数组绑定给 [style]。

当把 [style] 绑定到对象表达式时,该对象的引用必须改变,这样 Angular 才能更新这个类列表。在不改变对象引用的情况下更新其属性值是不会生效的。

单样式和多样式绑定示例

nav-bar.component.ts

  1. @Component({
  2. selector: 'app-nav-bar',
  3. template: `
  4. <nav [style]='navStyle'>
  5. <a [style.text-decoration]="activeLinkStyle">Home Page</a>
  6. <a [style.text-decoration]="linkStyle">Login</a>
  7. </nav>`
  8. })
  9. export class NavBarComponent {
  10. navStyle = 'font-size: 1.2rem; color: cornflowerblue;';
  11. linkStyle = 'underline';
  12. activeLinkStyle = 'overline';
  13. /* . . . */
  14. }

如果同一个样式 Attribute 有多个绑定,Angular 将使用样式优先级来确定要使用的绑定。

image.png

NgStyle指令可以用作代替直接绑定 [style] 的方法。但是,最好使用上述不用 NgStyle 的绑定语法,因为由于 Angular 中样式绑定的改进,NgStyle 不再提供显著价值,将来可能会被删除。