解析Angular 2+ 样式绑定方式(2)
结果为:
[style.propertyName] vs. [ngStyle]
[style.propertyName]每次只能绑定一个属性
而 [ngStyle] 则可以同时绑定多个属性
当[style.propertyName] 和 [ngStyle] 绑定同一个属性时,比如都需要动态修改font-size
, [style.propertyName]则会覆盖[ngStyle]里面的同一属性.
当然除了style binding, 我们还可以使用class binding来动态修改样式。
class binding
[class.className]
使用这种方式,我们可以根据绑定变量的值来动态添加或者移除css class。
还是使用刚才button的例子。
则代码变为:
//template <button class="btn btn-primary" [class.btnBorder]="changeBorder" > Style Binding </button> //CSS .btnBorder { border-color: green; border-radius: 10px; } //Component Class private changeBorder: boolean = true;
结果如图:
看着字体有点小啊,我们再动态添加一个改变字体的class:my
这个时候代码就变为了:
//template <button class="btn btn-primary" [class.btnBorder]="changeBorder" [class.btnFont]="changeFont" > Style Binding </button> //CSS .btnBorder { border-color: green; border-radius: 10px; } .btnFont { font-size: 2em; font-weight: bold; } //Component Class private changeBorder: boolean = true; private changeFont: boolean = true;
结果如图:
[ngClass]
像[ngStyle]一样,angular也给我们提供了一个指令[ngClass]来动态绑定多个css class。
那么我们可以使用[ngClass]对上面的代码重构一下
//template <button class="btn btn-primary" [ngClass]= "{'btnFont': changeFont, 'btnBorder': changeBorder}"> Style Binding </button> //CSS .btnBorder { border-color: green; border-radius: 10px; } .btnFont { font-size: 2em; font-weight: bold; } //Component Class private changeBorder: boolean = true; private changeFont: boolean = true;
结果依旧为:
[ngClass]需要绑定一个object,key是css类名, value是绑定的变量。
[class.className] vs. [ngClass]
[class.className]每次只能绑定一个CSS类。