Angular 提供程序、变更检测、封装、角组件定义中的主机

Angular 提供程序、变更检测、封装、角组件定义中的主机,angular,typescript,npm,Angular,Typescript,Npm,我看到一些包,它们提供提供者,封装,变更检测,主机,如下代码。它们是什么意思,以及它在组件类中相对于以下代码的行为 @Component({ selector: 'ng-select', templateUrl: './ng-select.component.html', styleUrls: ['./ng-select.component.scss'], providers: [{ provide: NG_VALUE_ACCESSOR,

我看到一些包,它们提供提供者封装变更检测主机,如下代码。它们是什么意思,以及它在组件类中相对于以下代码的行为

@Component({
    selector: 'ng-select',
    templateUrl: './ng-select.component.html',
    styleUrls: ['./ng-select.component.scss'],
    providers: [{
        provide: NG_VALUE_ACCESSOR,
        useExisting: forwardRef(() => NgSelectComponent),
        multi: true
    }],
    encapsulation: ViewEncapsulation.None,
    changeDetection: ChangeDetectionStrategy.OnPush,
    host: {
        'role': 'listbox',
        'class': 'ng-select',
        '[class.ng-select-single]': '!multiple',
    }
})

它意味着跟随事物

  • 封装如果您使用viewEncapsation.None,这意味着您将编写的样式属性或样式URL:(css文件)将是全局范围,因此如果您有

    .危险{ 颜色:红色 } 也可以在构件外部使用该样式

  • 主机意味着您正在主机元素本身上添加属性,例如,在本例中,它将添加下一个属性

    ng选择角色class=“ng选择”\

  • 提供者意味着您在那里注入的服务将仅在组件级别可用,如果您有两个不同的ng select,则它们都将具有该类的不同实例

  • 更改检测您可以配置更改检测在此组件上的工作方式,默认情况下,在每个更改检测周期中,它也将运行此组件,OnPush策略意味着仅当任何输入属性引用已更改时,它才会在此组件上运行更改检测


提供者:视图封装:主机绑定:更改检测:主机做什么?它的行为是否类似于向模板添加属性?是的,您可以操作主机组件,从那里将出现这种情况