像 ngIf 一样隐藏 Angular 2 material 工具提示
Hide Angular 2 material tooltip like ngIf
在Angular 1 Material中我可以使用指令,现在它是一个属性,现在很难做到。怎样才能简单的让tooltip像页面宽度小的时候显示,页面宽度大的时候隐藏?
我找不到。不可能使用 like:
<md-tooltip ngIf="false">sometimes hidden</md-tooltip>
如果你想有条件地隐藏一个元素,你可以使用 *ngIf 或 hidden。示例
<div *ngIf="someVariable">content</div> // if someVariable if true, will display
<div [hidden]="someVariable">content</div> // if someVariable is true, will hide
如果我对您的要求理解正确,您希望仅在满足特定条件时显示工具提示,请尝试以下操作:
<div [matTooltip]="isWide ? 'Visible' : null"></div>
你可以这样做:
<button
mat-raised-button
color="primary"
[matTooltip]="test ? 'You must complete all the required fields.' : null"
matTooltipPosition="above"
>
Primary
</button>
如果你想在它为 false 时显示工具提示,只需将 null
替换为你的文本即可。
我做了以下指令,仅当文本大于包含元素时才显示工具提示。
我扩展了 MatTooltip class 来创建我自己的自定义指令。
此指令侦听它所附加的元素上的鼠标输入事件。然后仅当文本大小超过元素大小时才启用工具提示。
import { Directive, ElementRef, HostListener, Inject, Input, NgZone, Optional, ViewContainerRef } from '@angular/core';
import {
MAT_TOOLTIP_DEFAULT_OPTIONS,
MAT_TOOLTIP_SCROLL_STRATEGY,
MatTooltip,
MatTooltipDefaultOptions
} from '@angular/material';
import { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';
import { Directionality } from '@angular/cdk/bidi';
import { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';
import { Platform } from '@angular/cdk/platform';
@Directive({
selector: '[appToolTip]'
})
export class ToolTipDirective extends MatTooltip {
@Input()
get appToolTip() {
return this.message;
}
set appToolTip(txt: string) {
this.message = txt;
}
constructor(private el: ElementRef,
_overlay: Overlay,
_scrollDispatcher: ScrollDispatcher,
_viewContainerRef: ViewContainerRef,
_ngZone: NgZone,
_platform: Platform,
_ariaDescriber: AriaDescriber,
_focusMonitor: FocusMonitor,
@Inject(MAT_TOOLTIP_SCROLL_STRATEGY) _scrollStrategy: any,
@Optional() _dir: Directionality,
@Optional() @Inject(MAT_TOOLTIP_DEFAULT_OPTIONS)
_defaultOptions: MatTooltipDefaultOptions
) {
super(
_overlay,
el,
_scrollDispatcher,
_viewContainerRef,
_ngZone,
_platform,
_ariaDescriber,
_focusMonitor,
_scrollStrategy,
_dir,
_defaultOptions
);
}
@HostListener('mouseenter')
check(): void {
this.disabled = (this.el.nativeElement.offsetWidth < this.el.nativeElement.scrollWidth) ? false : true;
}
}
只需将指令附加到元素,例如:
<td [appToolTip] = "someTxtString"> {{someTxtString}} </td>
matTooltipDisabled
用于禁用 Angular 中的工具提示。使用它我们可以有条件地显示工具提示。
<button mat-raised-button matTooltip="Disable tooltip" matTooltipDisabled="true">
Disable tooltip
</button>
我们可以通过绑定到变量来动态更改 [matTooltipDisabled]
输入 属性。
<button mat-raised-button matTooltip="Disable tooltip [matTooltipDisabled]="isDisabled">
Disable tooltip
</button>
如果要更改工具提示的颜色和其他 css 属性,
<button mat-raised-button matTooltip="Adding a custom class to the tooltip" matTooltipClass="mat-tooltip">
Custom tooltip
</button>
css文件如下
::ng-deep .mat-tooltip{
color: #3E474B !important;
background-color:#FCFCFC !important;
border-color: rgb(197, 197, 197);
font-size: 14px !important;
}
在Angular 1 Material中我可以使用指令,现在它是一个属性,现在很难做到。怎样才能简单的让tooltip像页面宽度小的时候显示,页面宽度大的时候隐藏?
我找不到。不可能使用 like:
<md-tooltip ngIf="false">sometimes hidden</md-tooltip>
如果你想有条件地隐藏一个元素,你可以使用 *ngIf 或 hidden。示例
<div *ngIf="someVariable">content</div> // if someVariable if true, will display
<div [hidden]="someVariable">content</div> // if someVariable is true, will hide
如果我对您的要求理解正确,您希望仅在满足特定条件时显示工具提示,请尝试以下操作:
<div [matTooltip]="isWide ? 'Visible' : null"></div>
你可以这样做:
<button
mat-raised-button
color="primary"
[matTooltip]="test ? 'You must complete all the required fields.' : null"
matTooltipPosition="above"
>
Primary
</button>
如果你想在它为 false 时显示工具提示,只需将 null
替换为你的文本即可。
我做了以下指令,仅当文本大于包含元素时才显示工具提示。
我扩展了 MatTooltip class 来创建我自己的自定义指令。
此指令侦听它所附加的元素上的鼠标输入事件。然后仅当文本大小超过元素大小时才启用工具提示。
import { Directive, ElementRef, HostListener, Inject, Input, NgZone, Optional, ViewContainerRef } from '@angular/core';
import {
MAT_TOOLTIP_DEFAULT_OPTIONS,
MAT_TOOLTIP_SCROLL_STRATEGY,
MatTooltip,
MatTooltipDefaultOptions
} from '@angular/material';
import { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';
import { Directionality } from '@angular/cdk/bidi';
import { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';
import { Platform } from '@angular/cdk/platform';
@Directive({
selector: '[appToolTip]'
})
export class ToolTipDirective extends MatTooltip {
@Input()
get appToolTip() {
return this.message;
}
set appToolTip(txt: string) {
this.message = txt;
}
constructor(private el: ElementRef,
_overlay: Overlay,
_scrollDispatcher: ScrollDispatcher,
_viewContainerRef: ViewContainerRef,
_ngZone: NgZone,
_platform: Platform,
_ariaDescriber: AriaDescriber,
_focusMonitor: FocusMonitor,
@Inject(MAT_TOOLTIP_SCROLL_STRATEGY) _scrollStrategy: any,
@Optional() _dir: Directionality,
@Optional() @Inject(MAT_TOOLTIP_DEFAULT_OPTIONS)
_defaultOptions: MatTooltipDefaultOptions
) {
super(
_overlay,
el,
_scrollDispatcher,
_viewContainerRef,
_ngZone,
_platform,
_ariaDescriber,
_focusMonitor,
_scrollStrategy,
_dir,
_defaultOptions
);
}
@HostListener('mouseenter')
check(): void {
this.disabled = (this.el.nativeElement.offsetWidth < this.el.nativeElement.scrollWidth) ? false : true;
}
}
只需将指令附加到元素,例如:
<td [appToolTip] = "someTxtString"> {{someTxtString}} </td>
matTooltipDisabled
用于禁用 Angular 中的工具提示。使用它我们可以有条件地显示工具提示。
<button mat-raised-button matTooltip="Disable tooltip" matTooltipDisabled="true">
Disable tooltip
</button>
我们可以通过绑定到变量来动态更改 [matTooltipDisabled]
输入 属性。
<button mat-raised-button matTooltip="Disable tooltip [matTooltipDisabled]="isDisabled">
Disable tooltip
</button>
如果要更改工具提示的颜色和其他 css 属性,
<button mat-raised-button matTooltip="Adding a custom class to the tooltip" matTooltipClass="mat-tooltip">
Custom tooltip
</button>
css文件如下
::ng-deep .mat-tooltip{
color: #3E474B !important;
background-color:#FCFCFC !important;
border-color: rgb(197, 197, 197);
font-size: 14px !important;
}