当前位置:  开发笔记 > 前端 > 正文

从HTML中删除/替换组件的选择器标记

如何解决《从HTML中删除/替换组件的选择器标记》经验,为你挑选了2个好方法。

我开始使用Angular 2(版本2.0.0-alpha.46)并创建一些组件.

使用以下代码创建组件时:

打字稿:

import {ComponentMetadata as Component, ViewMetadata as View} from 'angular2/angular2';

@Component({
   selector: 'my-component'
})

@View({
     template: '
Hello My component
' }) export class MyCompoent{ constructor() { console.info('My Component Mounted Successfully'); } }

HTML:


它工作正常,但是当我这样做时Inspect element,我可以看到这样生成的标签:

输出HTML


    
Hello My component

问题

它将标记保存在HTML中,并且我的一些CSS没有按预期工作.

有没有办法删除类似于角1 的标签(replace: true在指令中)?



1> Günter Zöchb..:

根据https://github.com/angular/angular/issues/3866,在AngularJS 1.x中弃用了Replace,因为它似乎不是一个好主意.

作为一种解决方法,您可以在组件中使用属性选择器

selector: '[my-component]'

selector: '[myComponent]'

然后像使用它一样

Hello My component

Hello My component

暗示

指令选择器应该是camelCase而不是snake-case.Snake-case仅用于元素选择器,因为-自定义元素需要它.Angular不依赖于作为自定义元素的组件,但无论如何,遵循此规则被认为是良好的做法.细跟驼峰属性角的作品,并使用他们所有的指令(*ngFor,ngModel,...),并且也由角风格指南建议.


camelCase****不是**组件选择器的首选样式.见[Style 05-02](https://angular.io/docs/ts/latest/guide/style-guide.html#05-02)
这仅适用于**标签名称**.对于**属性选择器**,没有理由不使用camelCase.他们更喜欢标签选择器的camelCase名称,但这与WebComponents命名样式不匹配,其中名称中的`-`为****.这不会造成太大的伤害,因为Angular不依赖于WebComponents功能.唯一的细微差别是没有`-`的标签继承自`HTMLUnknownElement`而不是`HTMLElement`参见http://www.html5rocks.com/en/tutorials/webcomponents/customelements/#upgrades
根据Angular 2的风格指南05-03建议避免这种情况,https://angular.io/docs/ts/latest/guide/style-guide.html#!#05-03
可以,但是在某些情况下这是强制性的。否则您将如何使<tr>或<li>成为不支持其他标签名称的组件?

2> Thierry Temp..:

引用Angular 1到Angular 2升级策略doc:

Angular 2中不支持替换其主机元素的指令(替换:Angular 1中的true指令).在许多情况下,这些指令可以升级到常规组件指令.

事实上,这取决于你想做什么,你需要知道Angular2支持几件事:

属性指令 - 请参阅https://angular.io/guide/attribute-directives

结构指令 - 请参阅https://angular.io/guide/structural-directives

根据您的想法,您可以选择不同的方法.对于您的简单示例,似乎@Günter解决方案更好;-)

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有