javascript - Angular 2 ngClass 未在 View 上更新

标签 javascript css angular angular2-template

我在让 ngClass 更新我的 View 时遇到了一些困难,即使后端正在正确更新。我的 Controller 如下:

@Component({
    selector: 'show-hide-table',
    template: '
    <table>
        <thead>
            <tr>
                <th (click)="toggleHidden()">
                    <div>Show/Hide</div>
                </th>
                <th [ngClass]="{\'hidden\':isHidden}">
                    <div>Div is Shown</div>
                </th>
            </tr>
        </thead>
    </table>',
    styleUrls: ['show-hide-table.component.css']
})

export class ShowHideTable implements OnInit, OnChanges, DoCheck {
    public isHidden: boolean = false;

    public toggleHidden() {
        this.isHidden = !this.isHidden;
        this.log.debug('Hidden', this.isHidden);
    }

    ngOnChanges(changes: {[propKey: string]: SimpleChange}) {
        this.log.debug('Grid Changes');
    }

    ngDoCheck() {
        this.log.debug('Grid Check');
    }
}

'hidden' 是一个带有 display: none 的 css 类。当我默认 isHidden 为 true 时,标题被隐藏,当为 false 时,它​​被显示,所以我相信这个类正在工作。我为了提问而简化了它,但这应该准确地反射(reflect)了我的代码。我单击标题,我得到一个显示 isHidden 变量切换的日志,但隐藏类没有更改以适应。此外,点击可点击 header 时,ngOnChanges 和 ngDoCheck 都不会触发。

最佳答案

你的单引号对太多了。 'hidden' 周围的引号实际上结束了第一个字符串并开始了另一个字符串。你必须避开那些引号。

<th [ngClass]="{\'hidden\':isHidden}">

我无法对此进行测试,但它应该可以工作。如果出于某种原因,您可以尝试使用引号的 Javascript 编码。将单引号替换为 \x27

关于javascript - Angular 2 ngClass 未在 View 上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43740706/

相关文章:

javascript - 元素偏移(包括滚动)

javascript - 如何在 Safari 中更改全屏背景颜色

html - 如何使元素忽略 css Bootstrap 类?

javascript - 如何以 Angular 将对象存储在本地存储中?

Angular2 + RxJS BehaviorSubject 订阅不适用于所有组件

javascript - 如何在正则表达式中创建或运算符?

javascript - 如何将文件写入NodeJS中的特定目录?

html - 100% 宽度大于父级的 div

html - CSS 子选择器性能与类膨胀

javascript - 管道 'AsyncPipe' 的参数无效