Angular @HostBinding,简单示例和基础

时间:2018-11-12 07:24:31

标签: angular angular2-hostbinding

我会非常了解Angular @HostBinding概念。不幸的是,我的书很好,但是对这个概念的解释不是很清楚。

请参见代码:

@Component({
  selector: 'app-test-component',
  templateUrl: './test-component.component.html',
  styleUrls: ['./test-component.component.css']
})
export class TestComponentComponent implements OnInit {

  @Input() dataModel:AppModel;
  @HostBinding('attr.class') cssClass = 'alfa';

  constructor() { 

(...)

我的个人解释:“主机绑定允许在主机元素(在本例中为app-test-component标记)中通过其自身的组件(换句话说,从我在下面提到的该文件中)设置某些内容;在这种情况下,我将此标签的class属性设置为名为cssClass的变量,并设置属性“ alfa””。正确吗?

在这种情况下,如果我在对应的css文件中定义了“ alfa”样式,为什么在显示我的组件的页面中看不到这种样式(即背景色或其他颜色)?

非常感谢您!

编辑:我需要非常了解行

@HostBinding('attr.class') cssClass = 'alfa';

您是否可以确认是否完全等同于“将模板元素的class属性设置为分配给值'alfa'的字符串cssClass”? (或换句话说,与主模板标签中的“ class ='alfa'”指令相同)

而且,您能不能给我写一个同样结果但不使用@hostbinding的示例?我敢肯定,在比较中看到两个等效的解决方案对我很有帮助。

非常感谢您的耐心!

4 个答案:

答案 0 :(得分:1)

  

:host()CSS伪类函数选择的影子主机。   包含在内部使用的CSS的阴影DOM(因此您可以选择一个   来自其影子DOM内部的自定义元素)-但仅当选择器时   该函数的参数与影子主机匹配时给出。

参考:https://developer.mozilla.org/en-US/docs/Web/CSS/:host()

尝试一下,它将起作用

component.css

:host(.alfa){
  color: red;
}

答案 1 :(得分:1)

在Angular中,@ HostBinding()函数装饰器使您可以从指令类中设置宿主元素的属性。

假设您要更改样式属性,例如高度,宽度,颜色,边距,边框等,或指令类中宿主元素的任何其他内部属性。在这里,您需要使用@HostBinding()装饰器函数来访问host元素上的这些属性,并在指令类中为其分配一个值。

@HostBinding()装饰器带有一个参数,即主机元素属性的名称,我们要在指令中分配该值。

答案 2 :(得分:1)

@HostBinding('attr.class') cssClass = 'alfa';

这行代码意味着您在主机元素上放置了一个名为cssClass的属性,并且希望每次此属性更改时attr.class属性都将相应地更改。

答案 3 :(得分:0)

使用HostBinding可以设置宿主元素的属性,例如宿主元素的高度。 @HostBinding()装饰器允许访问元素的height属性(例如)并分配一个值。 HostBinding装饰器采用一个参数,这是主机元素属性的名称。在这种情况下,高度

@HostBinding('style.height') height: string;
constructor(){
  this.height = '15px';
}

这里的问题是“ @HostBinding('attr.class')cssClass ='alfa';”表示我们希望每个“ app-test-component”(组件的选择器)都具有css类alfa。