angular - 如何使用点击事件在 Angular 中切换类

标签 angular

我的项目中有两个组件。一个是header.component,另一个是sidebar.component。在 header.component 中,我有导航按钮来打开sidebar。 所以,基本上当有人点击按钮时侧边栏就会打开。我在 CSS 文件中声明了 is-open 类,以将其添加到侧边栏组件的元素中。所以我需要监听 header.component 中的点击事件并将 is-open 类切换到 sidebar.component

我在我的 Angular 项目中添加了一个简单的 js 文件,如下所示:

window.onload = function () {
    let navBtn = document.getElementById('drawerbtn')

    navBtn.addEventListener('click', function () {
        let navDrawer = document.getElementById('navdrawer')
        navDrawer.classList.toggle('is-open')
        console.dir(navDrawer)
    })
}

我检查了控制台,它正在工作,但在我的元素 is-open 类中没有添加。我怎样才能如此轻松地做到这一点?

最佳答案

最好的解决方案是创建一个服务,该服务将负责管理侧边栏的状态或您想要的任何内容。 在此服务中,您需要创建一个变量,例如:isMenuOpen,该变量可以是BehaviorSubject 或Subject。 然后在组件中,您需要使用异步管道订阅该变量中的更改或直接在 HTML 中订阅。 最后,当您需要显示菜单时,您可以在 2 个 CSS 类之间切换,或者直接使用属性“display”在无和 block 之间进行更改。 Angular 与平台无关,使用窗口或文档就打破了这种不可知论。

关于angular - 如何使用点击事件在 Angular 中切换类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60911441/

相关文章:

angular - 原始异常: TypeError: is not a function

Angular Material 表单 - 添加垫复选框会破坏样式表

javascript - 在 Angular2 中使用 Parse 作为模块

javascript - 如何发布 angular2 指令

Angular 5 tsconfig baseURL 不工作

node.js - 类型错误 : Cannot read property 'headers' of null! MEAN 堆栈

Angular MatDialog 附加到 HTML 而不是显示为弹出窗口

angular - 在 WebStorm 中的导入和大括号之间添加空格

Angular 6 谷歌广告词转换

angular - 在 VSTS 中包含代码覆盖率报告,VSTS 是否必须使用测试适配器?