Html CSS引导在角度子组件中不起作用
在Angular 8中将子组件包含在父组件中时,我面临一个问题。我的子组件只包含一个下拉列表。现在,当我在父组件中包含相同的内容,并在父组件的div中使用CSS时,显示输出将如预期的那样出现 父组件: 子组件 但是现在要减少计划在子组件中移动div class=col-sm-5的编码Html CSS引导在角度子组件中不起作用,html,css,angular,Html,Css,Angular,在Angular 8中将子组件包含在父组件中时,我面临一个问题。我的子组件只包含一个下拉列表。现在,当我在父组件中包含相同的内容,并在父组件的div中使用CSS时,显示输出将如预期的那样出现 父组件: 子组件 但是现在要减少计划在子组件中移动div class=col-sm-5的编码 @Component({ selector: '[app-country]', template: './app-country.component.html', styleUrls: ['./app
@Component({
selector: '[app-country]',
template: './app-country.component.html',
styleUrls: ['./app-country.component.css']
})
不起作用的新编码:
父组件:
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country></app-country>
</div>
</div>
子组件:
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country></app-country>
</div>
</div>
在第二部分中,如果我通过Web控制台扩展输出HTML,然后发现代码中包含CSS,但行为不同
另外,请注意,我使用的是引导CSS
任何帮助都是值得的。如果您使用的是Angular的早期版本,则封装默认设置不同。你可以试试
@Component({
// ...
encapsulation: ViewEncapsulation.None
})
对于.ts文件中的子组件。如果使用早期版本的Angular,则封装默认设置不同。你可以试试
@Component({
// ...
encapsulation: ViewEncapsulation.None
})
对于.ts文件中的子组件。这是因为现在生成的最后一个HTML如下所示
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country>
<div class="col-sm-5">
<select [(ngModel)]='countryDetails.default' class="form-control form-control-lg">
<option *ngFor="let province of countryDetails.details" value=
{{country.id}}>
{{country.value}}
</option>
</select>
</div>
</app-country>
</div>
</div>
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country></app-country>
</div>
</div>
但早些时候
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<div class="col-sm-5">
<app-country>
<select [(ngModel)]='countryDetails.default' class="form-control form-control-lg">
<option *ngFor="let province of countryDetails.details" value=
{{country.id}}>
{{country.value}}
</option>
</select>
</app-country>
</div>
</div>
</div>
正如你们所看到的,在你们的方法中,立场是不同的。第5列之前和第5列之后
这会导致引导行类中断css:这是因为现在生成的最后一个HTML是这样的
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country>
<div class="col-sm-5">
<select [(ngModel)]='countryDetails.default' class="form-control form-control-lg">
<option *ngFor="let province of countryDetails.details" value=
{{country.id}}>
{{country.value}}
</option>
</select>
</div>
</app-country>
</div>
</div>
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country></app-country>
</div>
</div>
但早些时候
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<div class="col-sm-5">
<app-country>
<select [(ngModel)]='countryDetails.default' class="form-control form-control-lg">
<option *ngFor="let province of countryDetails.details" value=
{{country.id}}>
{{country.value}}
</option>
</select>
</app-country>
</div>
</div>
</div>
正如你们所看到的,在你们的方法中,立场是不同的。第5列之前和第5列之后
这会导致引导行类中断css:更新:解决方案2
参考
然后可以创建一个指令来动态删除父元素
@Directive({
selector: '[remove-wrapper]'
})
export class RemoveWrapperDirective {
constructor(private el: ElementRef) {
const parentElement = el.nativeElement.parentElement;
const element = el.nativeElement;
parentElement.removeChild(element);
if(parentElement.parentNode){
parentElement.parentNode.insertBefore(element, parentElement.nextSibling);
parentElement.parentNode.removeChild(parentElement);
}
}
}
像这样使用它
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country>
<div class="col-sm-5">
<select [(ngModel)]='countryDetails.default' class="form-control form-control-lg">
<option *ngFor="let province of countryDetails.details" value=
{{country.id}}>
{{country.value}}
</option>
</select>
</div>
</app-country>
</div>
</div>
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country></app-country>
</div>
</div>
在父组件中,将其用作:
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<div class="col-sm-5" app-country>
</div>
</div>
</div>
现在,您将不会得到任何额外的元素包装器,您的引导css也可以正常工作。希望这将有助于解决您的问题。更新:解决方案2
参考
然后可以创建一个指令来动态删除父元素
@Directive({
selector: '[remove-wrapper]'
})
export class RemoveWrapperDirective {
constructor(private el: ElementRef) {
const parentElement = el.nativeElement.parentElement;
const element = el.nativeElement;
parentElement.removeChild(element);
if(parentElement.parentNode){
parentElement.parentNode.insertBefore(element, parentElement.nextSibling);
parentElement.parentNode.removeChild(parentElement);
}
}
}
像这样使用它
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country>
<div class="col-sm-5">
<select [(ngModel)]='countryDetails.default' class="form-control form-control-lg">
<option *ngFor="let province of countryDetails.details" value=
{{country.id}}>
{{country.value}}
</option>
</select>
</div>
</app-country>
</div>
</div>
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<app-country></app-country>
</div>
</div>
在父组件中,将其用作:
<div class="col-lg-12">
<div class="form-group row">
<label class="col-sm-1 col-form-label-lg font-weight-bold">Country</label>
<div class="col-sm-5" app-country>
</div>
</div>
</div>
现在,您将不会得到任何额外的元素包装器,您的引导css也可以正常工作。希望这将有助于解决您的问题。ankit agarwal的回答是相关的。 不过,如果您想将col-sm-5类强制应用到组件中,那么应该在组件内部使用。HostBinding允许您将属性/类/样式附加到承载组件或指令的Dom元素 因此,在您的示例中,保留应用程序国家/地区选择器,我不太喜欢您需要的组件的属性选择器: /*country.component.css*/ /*这是必要的,以使app country元素作为 *页面布局中的div*/ :主持人{ 显示:块; }
@ankit agarwal的回答是相关的。 不过,如果您想将col-sm-5类强制应用到组件中,那么应该在组件内部使用。HostBinding允许您将属性/类/样式附加到承载组件或指令的Dom元素 例如,我不需要将属性选择器保留在应用程序中,因此您不需要: /*country.component.css*/ /*这是必要的,以使app country元素作为 *页面布局中的div*/ :主持人{ 显示:块; }
@Souvik,您需要首先安装引导程序,并且需要在angular.json中提供引导程序文件的链接 以下是在angular项目中使用引导的方法,希望对您有用 方法1:使用Angular CLI npm安装 要在项目中安装引导程序,可以使用以下命令
npm install bootstrap --save
之后,需要将其添加到angular.json文件中,该文件位于项目的根目录下
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"src/styles.scss"
],
添加后,您需要关闭并运行项目一次,这样它才能正常工作
方法2:使用CDN复制和粘贴方法。
您可以使用一种旧的方法在项目中使用引导,路径的URL被添加到index.html中以供全局引用
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
@Souvik,您需要首先安装引导程序,并且需要在angular.json中提供引导程序文件的链接 以下是在angular项目中使用引导的方法,希望对您有用 方法1:使用Angular CLI npm安装 要在项目中安装引导程序,可以使用以下命令
npm install bootstrap --save
之后,需要将其添加到angular.json文件中,该文件位于项目的根目录下
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"src/styles.scss"
],
添加后,您需要关闭并运行项目一次,这样它才能正常工作
方法2:使用CDN复制和粘贴方法。
您可以使用一种旧的方法在项目中使用引导,路径的URL被添加到index.html中以供全局引用
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
子组件将在父组件标记a内呈现 在下面 因此,相应地修改css,或者在父级中使用属性选择器来使用组件
eg. <div class="col-sm-5" app-country></div>
您的子组件将在父组件标记内呈现,如下所示
<app-country>
<div class="col-sm-5">
...
</div>
</app-country>
因此,相应地修改css,或者在父级中使用属性选择器来使用组件
eg. <div class="col-sm-5" app-country></div>
您是否只使用Bootstrap CSS,还是还包括Bootstrap的JS?在选项循环中,是country.id还是province.id和province.value?将其作为国家id或国家详细信息。这只是一个供参考的演示数据。另请注意,不包括Bootstrap的JS。@Souvik对您的子组件使用属性选择器,请参阅我的回答您是否仅使用Bootstrap CSS,还是也包括Bootstrap的JS?在选项循环中,是country.id还是province.id和province.value?将其作为国家id或国家详细信息。这只是一个供参考的演示数据。另请注意,不包括引导程序的JS。@Souvik对您的子组件使用属性选择器,请参阅我的回答。我正在尝试将总div移动到我的子组件中。因为无论在何处导入此组件,都将具有相同的列大小和详细信息。我的目的是在导入时减少代码。@Souvik我已更新了答案,并为您的案例提出了另一个解决方案。这解决了我最初的下拉CSS问题,但由于标签相同,我如何在组件中移动标签。使用这段代码,如果我将标签放在组件中,它将删除标签。我尝试的是将总div移动到我的子组件中。因为无论在何处导入此组件,都将具有相同的列大小和详细信息。我的目的是在导入时减少代码。@Souvik我已更新了答案,并为您的案例提出了另一个解决方案。这解决了我最初的下拉CSS问题,但由于标签相同,我如何在组件中移动标签。使用这段代码,如果我把标签放在组件中,它将移除标签。这个解决方案也适用于我。但是你能告诉我如何在组件下添加标签吗。这个解决方案也适用于我。但是你能告诉我如何在组件下添加标签吗。国