- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到的问题是,在尝试通过 ID 访问 html 元素时出现以下错误。当用户单击按钮以将不同的样式类应用于元素时,我尝试访问 classList。类列表和元素通常始终为空,除非我将 viewEncapsulation 切换回默认的模拟设置。
错误消息:
TypeError: Cannot read property 'classList' of null
问题:我试图让这个特定组件不继承我通过 angular.json 文件导入到项目中的第 3 方 SCSS 文件。当我使用默认的 ViewEncapsulation.Emulated 时,该组件继承了与某些组件样式冲突的全局 SCSS 样式。
文件结构正常,我将SCSS和HTML放在相应的文件中,然后将它们导入到组件中。
我觉得这应该是大型项目的常见主题。如果有不同的方法来切换事件元素的样式,请告诉我。
组件.ts:
import { Component, ViewEncapsulation, OnInit } from '@angular/core';
@Component({
encapsulation: ViewEncapsulation.Native,
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
title = 'scssTesting';
constructor() { }
step: string = 'step1';
step1: any;
step2: any;
step3: any;
ngOnInit() {
}
next() {
this.step1 = document.getElementById('step1');
this.step2 = document.getElementById('step2');
this.step3 = document.getElementById('step3');
if (this.step === 'step1') {
this.step = 'step2';
this.step1.classList.remove("is-active");
this.step1.classList.add("is-complete");
this.step2.classList.add("is-active");
} else if (this.step === 'step2') {
....
}
}
组件.scss
.progress {
position: relative;
display: flex;
.........
}
组件.html
<div class="container">
<div class="progress">
<div class="progress-track"></div>
<div id="step1" class="progress-step">
Step One
</div>
<div id="step2" class="progress-step">
Step Two
</div>
<div id="step3" class="progress-step">
Step Three
</div>
</div>
<button (click)="next()">Next Step</button>
</div>
最佳答案
我能想到的访问 HTML 元素的最简单方法是使用 Angulars ElementRef
。您可以阅读更多相关内容 here 。 请谨慎使用!下面是有关如何在您的情况下使用它的示例:
在您的app.component.html
<div #myelement>This is Pink</div>
在您的app.component.ts
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements AfterViewInit {
@ViewChild('myelement') el: ElementRef;
ngAfterViewInit() {
this.el.nativeElement.classList.add("myclass");
}
}
在你的app.component.css
.myclass {
color: pink;
font-weight: bold;
}
编辑:
对于纯粹的样式,正如 @SnorreDan 已经提到的,最好使用 Angulars [ngClass]
指示。您可以通过以下示例了解如何做到这一点:
在您的app.component.html
<div [ngClass]="myColorClass">This may change color!</div>
<button (click)="makePink()">Pink</button>
<button (click)="makeGreen()">Green</button>
在您的app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
myColorClass: string
makePink() {
this.myColorClass = 'pink';
}
makeGreen() {
this.myColorClass = 'green';
}
}
在你的app.component.css
.pink {
color: pink;
font-weight: bold;
}
.green {
color: green;
font-weight: bold;
}
希望对您有所帮助!
关于javascript - Angular - 如何在使用 ViewEncapsulation.Native 时访问 html 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56176385/
谁能解释一下 angular2ViewEncapsulation.Native、 ViewEncapsulation.None 和 ViewEncapsulation.Emulated 之间的区别强>
尝试更改封装时,会出现 Emulated、Native、None 和最后一个新的“ShadowDom”4 个选项。我知道 ViewEncapsulation.Native用于使用 Shadow DOM
Angular 的 ViewEncapsulation.ShadowDom 与 ViewEncapsulation.Emulated 有什么区别? 我了解 ViewEncapsulation.None
我最近一直在搞乱 ViewEncapsulation 和 ::ng-deep,遇到了两个不同的问题,这激起了我的好奇心。 假设我有一个组件: 从外部看,我可以通过以下方式为 toolti
在 Angular 中,默认模式是封装:ViewEncapsulation.Emulated 此模式通过使用 CSS 选择器启用样式封装。然而,'encapsulation: ViewEncapsul
我创建了一个新的 Angular CLI 元素和一个组件,我在其中尝试处理 css 特异性。在我尝试的地方,类样式会覆盖标签样式,但只有在 Angular 元素中它才起作用,反之亦然 我发现 View
在我当前的 Angular 7 应用程序中,我们正在努力处理来自库的组件,它需要一些 css 资源。我们不想将这些资源应用到我们应用程序的所有其余部分,而是应用到一个特定的组件,它的子组件和孙组件。
@Component({ ... ... ... encapsulations: ViewEncapsulation.None }) 当我使用 封装就像它与应用程序中其他组件中的默认样式冲突。 最佳答
我遇到的问题是,在尝试通过 ID 访问 html 元素时出现以下错误。当用户单击按钮以将不同的样式类应用于元素时,我尝试访问 classList。类列表和元素通常始终为空,除非我将 viewEncap
我添加了 ::ng-deep 组合器来引用组件中的内容投影元素。但是当我从默认 (ViewEncapsulation.Emulated) 切换到 ViewEncapsulation.ShadowDom
我在 firefox 和 edge 以及 ipad chrome 中使用 ViewEncapsulation.Native 加载 Angular 组件时遇到问题,在 mac 上的 safari、win
我正在尝试使用 styleUrls声明我的 Angular 2 组件以利用 View Encapsulation 时的属性但是在 Angular 完成初始化后将元素插入 DOM 时似乎出现了问题。 我
我想用 ViewEncapsulation.Native 制作组件,它使用 Bootstrap 4,而其他人使用 Bootstrap 3。这是 Bootstrap 4 的组件: import { Co
在 Material2 项目中,每个组件都使用 ViewEncapsulation.None。 (例如 MdButton ) 最近,md-toolbar 的封装刚刚更改为无. 为什么会这样?封装 CS
我必须通过单击按钮使 Angular2 组件看起来完全不同(不仅仅是颜色)。非常像不同的 CSS“皮肤”或“主题”。如果以后可以添加一些“皮肤”也很好。 我知道我可以简单地设置 ViewEncapsu
我安装了“react app 2”和 node-sass。它在 SCSS 上运行良好。但我只想知道如何创建组件特定的 SCSS,如 Angular(永远不会与其他组件 SCSS 发生冲突) Angul
我是一名优秀的程序员,十分优秀!