gpt4 book ai didi

javascript - @HostBinding 从子组件 Angular 4 禁用类

转载 作者:行者123 更新时间:2023-11-28 02:38:11 24 4
gpt4 key购买 nike

我有一个有用户登录和注销功能的 Angular 应用程序。在用户登录之前,我会显示一个欢迎页面作为主页。我只想在欢迎页面上启用背景图像。用户登录后,背景图像必须消失。当用户注销时,他将被重定向到欢迎页面,该页面必须再次显示背景图像。

我尝试通过将选择器重命名为“body”来在 app.component.ts 中使用@HostBinding。

app.component.ts

import {Component, HostBinding, Input} from '@angular/core';
import {InputMask} from "primeng/primeng";

@Component({
selector: 'body',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
path = '../assets/img/AvayaHome.jpg';
title = 'app';
toggleClass = true;
@HostBinding('class.bodyClass') isWelcomePage = this.toggleClass;
}

这是我的 CSS。

app.component.css

.bodyClass {
background-image: url("../assets/img/AvayaHome.jpg");
}

这是我的 index.html

<!doctype html>
<html lang="en">
<head>
<title> Something </title>
</head>
<body class="bodyClass">

<app-welcome-page></app-welcome-page>

</body>
</html>

我通过将 toggleClass 指定为 true 来为 bodyClass 启用 css 样式。用户登录后,我将更改子组件中 toggleClass 的值(位于 app.component.ts 中)。

这是我的 login.component.ts

onLogin() {
console.log('onLogin() invoked:', this._email, ':' , this.password);
if (this._email == null || this.password == null) {
this.errorMessage = 'All fields are required';
return;
}
this.errorMessage = null;
this.loginservice.authenticate(this._email, this.password);
this.appComponent.toggleClass = true;
this.router.navigate(['/dashboard']);
}

当用户登录为 FALSE 时,toggleClass 的值发生变化。但我仍然看到背景图像。不确定我做错了什么。任何帮助将不胜感激。

最佳答案

作为示例,让我们看一下这段代码:

var toggleClass = false;
var isWelcomePage = toggleClass;

console.log(isWelcomePage); // prints true

很酷,一切都按预期工作。

十秒后....

一些用户登录:

toggleClass = true;

console.log(isWelcomePage); // prints false

为什么没变???

如果您打开任何有关 javascript 的文档或书籍,您可以阅读一个主要规则:

原语总是不可变的。

当我们使用 = 将 toggleClass 变量分配给 isWelcomePage 变量时,我们将复制值 到新变量,因为原语是按值复制的。

解决方案一:

直接改变isWelcomePage属性

onLogin() {
...
this.appComponent.isWelcomePage = true;
...
}

方案二

定义 setter/getter

@HostBinding('class.bodyClass')
get isWelcomePage() {
return this.toggleClass;
}

关于javascript - @HostBinding 从子组件 Angular 4 禁用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47311692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com