angular - 从指令中获取价值以供将来使用
问题描述
我试图在窗口底部固定一个工具栏,但是当我向下滚动时,其他组件会一直在它上面。我想出的解决方案是获取工具栏的高度,并在边距/填充底部为“其他组件”提供该值。所以它永远不会超过它。
获取高度指令.ts
import { Directive, ElementRef, OnInit } from '@angular/core';
import { EventEmitter } from '../../../../node_modules/protractor';
@Directive({
selector: '[appGetHeight]'
})
export class GetHeightDirective implements OnInit{
constructor(public el: ElementRef) {}
ngOnInit() {
let styles = getComputedStyle(this.el.nativeElement);
console.log(styles.height);
}
}
我将该指令应用于此:
在哪里申请directive.html
<div appGetHeight class="col">
<p >Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto ipsum repellat illum corporis, possimus consequatur qui nisi ipsa in. Molestiae, dolor. Fugit, eum quas. Provident neque id optio facilis velit.</p>
</div>
有了这个,我得到了工具栏的高度console.log
,上面写着类似66.8px
. 我现在想使用“100px”来设置兄弟组件元素的底部边距,但我找不到任何解决方案。
谢谢您的帮助。
解决方案
要访问指令的实例,请考虑使用 exportAs 变量。你可以在这里做一些进一步的阅读:
https://netbasal.com/angular-2-take-advantage-of-the-exportas-property-81374ce24d26
摘要: 通过导出,您可以获得对组件指令的访问权限。要获得这样的访问权限,您需要将 exportAs 添加到 @Directive 装饰器并为其命名。
要将指令保存到父视图的变量中,您可以使用以下语法:
这是您的代码示例:
@Directive({
selector: '[appGetHeight]',
exportAs: 'heightDirective'
})
export class GetHeightDirectiveDirective implements OnInit {
public styles: CSSStyleDeclaration;
constructor(public el: ElementRef) {
}
ngOnInit() {
this.styles = getComputedStyle(this.el.nativeElement);
console.log(this.styles.height);
}
}
笔记:
我将样式更改为 this.styles 否则该变量将在 ngOnInit 之后被删除,因为 let 是一个块范围的变量。
看看第三行的“exportAs”。
用法:
<div appGetHeight #varWithDirective="heightDirective">Test</div>
<div class="login-background" [style.margin-bottom]="varWithDirective.styles.height" >
请注意这里的 #varWithDirective="heightDirective" heightDirective 必须代表 exportAs 名称。然后我可以访问变量#varWithDirective 中指令的所有值。
我希望这可以帮助你。
重要提示:您所要求的肯定可以用不同的方法来解决。用 JavaScript 解决 CSS 问题是不好的做法。但为此,我需要更多信息。
考虑使用:z-index / position fixed,也许还有 css-grid。
推荐阅读
- javascript - VueJS - DOM 模板解析和自定义元素
- spring - springframework.jdbc.core.JdbcTemplate 准备好的语句
- javascript - Ajax 函数没有被异步调用
- android - 如何修复“Android 软键盘不返回 KeyCode”
- google-apps-script - Google Sheet App Script - 按维度将值分散到单独的选项卡中
- php - Laravel/Symfony:响应下载文件未返回正确大小
- java - java.security.InvalidKeyException
- c++ - C++ 使用给定的构造函数在循环中创建对象
- javascript - 在浏览器中渲染文件
- javascript - 如何在使用 react-reveal/makeCarousel 制作的轮播上停止自动播放