- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在指令中将属性颜色添加到 ngStyle 属性。但是 ngStyle 没有对元素应用任何样式。编译器根本没有显示任何错误,控制台也没有。我尝试了 ngStyle 的不同语法,但它仍然无法正常工作。
我还在下面添加了 app.modules 代码。加载模块有没有问题。
import { Directive, ElementRef, OnInit, Renderer2, HostListener, Input } from '@angular/core';
// custom directive which changes background color for odd and even values of index
@Directive({
selector: '[appChangecolor]'
})
export class ChangecolorDirective implements OnInit {
@Input() index: any;
color: string;
constructor(private elementRef: ElementRef, private render: Renderer2) { }
// listnes to mouseenter event of the element on which custom directive is applied and calls the function
@HostListener('mouseenter') bgColor() {
if (this.index % 2 === 0) {
// style set through Renderer2 and not by directly accessing DOM element.
this.color = 'green';
} else {
this.color = 'red';
}
console.log(this.color);
}
// listens to the mouseleave event on the element on which directive is applied
@HostListener('mouseleave') bgColorRm() {
this.color = 'black';
console.log(this.color);
}
ngOnInit() {
this.index += 1;
}
}
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { NgStyle } from '@angular/common';
import {CommonModule} from '@angular/common';
import { AppComponent } from './app.component';
// custom directive imported from the respective file
import { ChangecolorDirective } from './changecolor.directive';
@NgModule({
declarations: [
AppComponent,
ChangecolorDirective // custom directive declared as part of module
],
imports: [
BrowserModule,
CommonModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
<!-- table displaying values from objects in users array -->
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Users Details</h3>
</div>
<div class="panel-body">
<section class="container">
<h2>User Details Table</h2>
<table class="table table-hover">
<thead>
<tr>
<th>Index</th>
<!-- looping thorugh array which contains keys of object and display as heading -->
<th *ngFor='let key of keys'>{{key}}</th>
</tr>
</thead>
<tbody>
<!-- looping through the users array and displaying values with the index with custom directive applied-->
<tr *ngFor='let user of users; index as i' appChangecolor [index]="i" [ngStyle]="{'color': color}">
<td>{{i+1}}</td>
<td>{{user.firstName}}</td>
<td>{{user.lastName}}</td>
<td>{{user.email}}</td>
</tr>
</tbody>
</table>
</section>
</div>
</div>
最佳答案
为什么你需要一个指令,试着在组件中做:
onMouseEnter(index) {
if (index % 2 === 0) {
this.color = 'green';
} else {
this.color = 'red';
}
}
onMouseLeave() {
this.color = 'black';
}
模板
<tr *ngFor='let user of users; index as i' (mouseenter)="onMouseEnter(index)" (mouseleave)="onMouseLeave()" [ngStyle]="{'color': color}">
<td>{{i+1}}</td>
<td>{{user.firstName}}</td>
<td>{{user.lastName}}</td>
<td>{{user.email}}</td>
</tr>
然后尝试使用 Renderer2 和 ElementRef
this.render.setStyle(this.elementRef, 'color', this.color);
对于 ngStyle,我现在无法对其进行测试,但我认为您必须拥有 EventEmitter。这是一些简单的例子,只是为了给出方向......
@Output colorChanged: EventEmitter = new EventEmitter<string>();
@HostListener('mouseenter') bgColor() {
....
this.colorChanged.emit(this.color);
....
}
@HostListener('mouseleave') bgColor() {
....
this.colorChanged.emit(this.color);
....
}
<tr *ngFor='let user of users; index as i' appChangecolor [index]="i" [ngStyle]="{'color': color}" (colorChanged)="this.color=$event">
关于javascript - 为什么 ngStyle 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46275297/
主要区别是什么 // getStyle returns a string like "color:blue" and some other attributes 到 //directive get
我正在学习有关 Angular4 ngStyle 的教程。 我有以下代码: app.component.html Save app.component.ts import { Componen
Hello 关于如何使用具有真假值的 NgStyle 的任何想法? 最佳答案 [ngStyle]指令等待一个表达式。 你可以这样做: Hello and so on... --> 或者... Hel
我在使用 Angular 8 进行样式清理时遇到问题。 我多次使用 ngStyle,但这次我无法设置 td 的边框元素。 我正在尝试根据字段设置边框样式。如果这个领域有与我相关的内容,那么我会突出显示
如果可能的话,我想为 ng 样式添加多个条件 目前我设置宽度和颜色是这样的 [ngStyle]="{ 'width': (question.score.toFixed(1)
我想根据投票分数更改li的background-color:高或低 downvote" [ngStyle]="{background-color: hsla(120, 100%, 50%, 0.3)
我正在使用 Angular 4 并尝试通过 ngStyle 将样式绑定(bind)到基于变量的 html 元素。但是,由于浏览器不兼容,我最终遇到了这个问题。 如何在不检查用户使用的浏览器的情况下将
我正在将颜色应用到 div 元素,我正在循环更改颜色,如下所示 toogleColor() { if(this.color=='blue') { this.color="red" this.
在构建用于 grid 的列组件时,我需要使用带有 ngStyle 的媒体查询。这是我目前所拥有的: import { Component, Input } from '@angular/core' c
angular ngstyle 拒绝样式。我正在尝试限制容器的大小。在初始页面加载时,我将初始宽度设置为 1100。但是使用 ng 样式会忽略样式。为什么? 这个有效: 这不起作用: card
在我的 Angular 5 应用程序中,[ngStyle] 没有扩展到样式属性。我只看到 ng-reflect-ng-style。这曾经工作过。最近对 Angular 或 Angular-cli 的更
我正在研究一个简单的 animation library我的用户可以使用属性绑定(bind)修改我的组件,到目前为止,我一直在执行以下操作来应用他们的选择: 但对于 future 的添加,我希望用
在 html 中我可以使用 ngStyle写: ... objExp 返回的地方 return { "background": "red" }; 这有效,并将元素的背景
我有以下错误不断返回调试控制台 HomeComponent.html:33 ERROR TypeError: Cannot read property 'url' of undefined at Ho
我试图给我的 div 动态样式 - 我希望 css 来自 Controller , Controller 返回的 css 对象不是硬编码的,而是动态变化的(我需要一个“顶部”字段,它是一个变量)。我正
祝大家有美好的一天! 我在理解 AngularJS 方面遇到了问题。我可以在 ngStyle 指令中使用我的自定义过滤器吗?为什么当我更改输入值时它不能同时更改跨度标签的不透明度(但它会更改标记中的值
我尝试添加图像(使用 API 加载项目)作为元素的背景图像。但它保留了无法读取未定义的属性'url'错误。虽然它实际上渲染了 url。这是模板面:
每当我更改范围值时,我都会尝试使ngStyle更改其left字段值。 我的灵感来自于它的完成方式:https://codepen.io/mayuMPH/pen/ZjxGEY但我没有找到在 Angula
我有一个div与 ngStyle属性。最初是div看起来不错。但是当我更新 ngStyle 内使用的属性时属性,然后 style标签未更新。因此这些更改不会反射(reflect)到 div . 以下是
我有一个带有可编辑输入字段的垫表。当进行更改时,我使用 [sytle.color] 将颜色更改为红色,以提醒用户保存这些更改。然而,我一次只能将 css 更改为一行,并且它正在执行整行。当有变化时,将
我是一名优秀的程序员,十分优秀!