Angular 2.x 在 body 标签上绑定类

Posted

技术标签:

【中文标题】Angular 2.x 在 body 标签上绑定类【英文标题】:Angular 2.x bind class on body tag 【发布时间】:2016-03-29 14:13:24 【问题描述】:

由于 Angular 2.x 是在 body 内部引导的,我如何在 body 标记上添加 [class.fixed]="isFixed"(在我的应用程序之外)?

<html>
<head>
</head>
<body [class.fixed]="isFixed">
  <my-app>Loading...</my-app>
</body>
</html>

我的应用组件看起来像

import Component from 'angular2/core';
import CORE_DIRECTIVES from 'angular2/common';
import RouteConfig, ROUTER_DIRECTIVES, Router, Location from 'angular2/router';
import About from './components/about/about';
import Test from './components/test/test';

@Component(
    selector: 'my-app',
    providers: [],
    templateUrl: '/views/my-app.html',
    directives: [ROUTER_DIRECTIVES, CORE_DIRECTIVES],
    pipes: []
)

@RouteConfig([
    path: '/about', name: 'About', component: About, useAsDefault: true,
    path: '/test', name: 'Test', component: Test
])

export class MyApp 
    router: Router;
    location: Location;

    constructor(router: Router, location: Location) 
        this.router = router;
        this.location = location;
    

【问题讨论】:

您是否尝试过仅使用"body" 作为应用程序组件的选择器? 谢谢,刚试了没成功。应用程序仍然有效,但我认为它只在 body 内部引导,而没有 body 本身。如果我将选择器更改为html - 它会用组件模板替换我的头部和身体.. 【参考方案1】:

使用&lt;body&gt; 作为应用组件可以正常工作,但您不能在&lt;body&gt; 标记上使用绑定,因为它会尝试将“isFixed”绑定到父级并且没有父级。

改用@HostBinding

@Component(
  selector: 'body',
  templateUrl: 'app_element.html'
)
class AppElement 
  @HostBinding('class.fixed') 
  bool isFixed = true;

这是 Dart 代码,但翻译成 TS 应该不难。

另见@HostBinding and @HostListener: what do they do and what are they for?

如果你不依赖服务器端渲染或网络工作者,你总是可以使用纯 JS 来更新 DOM。

或者你也可以使用

document.body.classList.add('foo');

【讨论】:

我认为这可能是一个解决方案,但我无法制作使用 HostBinding 的最简单示例。你有任何示例的链接吗?..来自 angular.io/docs 的示例不适用于我.. 我只使用 Dart,我试过了,它对我有用。您能否根据您的示例创建一个 Plunker,然后我们尝试找出它为什么不起作用? 我让 HostBinding 工作了,但这次我不会使用它。在某些情况下,我只会在 body 上添加类。但我无法选择角度为 2 的元素(或者我不知道如何选择)。 @Günter Zöchbauer 你能看看这个问题吗***.com/questions/34432980/… 谢谢 很高兴听到您成功了。我认为另一个问题在 Dart 中完全不同,因此我无法帮助您。 @StepanSuvorov 感谢您的提示。新文档链接中不再有示例:-/ 我添加了指向另一个答案的链接,该答案有更多解释。

以上是关于Angular 2.x 在 body 标签上绑定类的主要内容,如果未能解决你的问题,请参考以下文章

将每个数组元素绑定到选项标签

Angular 2双向绑定从html输入标签中删除名称属性

Angular 5 - 无法分配类属性

Angular.js数据绑定时自动转义html标签及内容

在 Angular 中包装 html 标签绑定的 UI 组件

IOS设备上给body绑定click事件不生效及其解决办法