Angular2中的ngShow和ngHide相当于什么?
我有一些要在某些条件下可见的元素。
在AngularJS我会写
<div ng-show="myVar">stuff</div>
我如何在Angular 2中做到这一点?
只要绑定到hidden
属性
[hidden]="!myVar"
也可以看看
问题
hidden
有一些问题,但因为它可以与CSS的display
属性冲突。
看看Plunker示例中的some
示例如何隐藏,因为它具有样式
:host {display: block;}
组。 (在其他浏览器中,这可能会有所不同 – 我使用Chrome 50进行testing)
解决方法
你可以通过添加来修复它
[hidden] { display: none !important;}
以index.html
的全局风格。
另一个陷阱
hidden="false" hidden="{{false}}" hidden="{{isHidden}}" // isHidden = false;
是一样的
hidden="true"
并不会显示该元素。
hidden="false"
会分配被认为是真的string"false"
。
只有值为false
或删除属性实际上会使元素可见。
使用{{}}
也会将expression式转换为string,并且无法按预期工作。
只有与[]
绑定将按预期方式工作,因为这个false
被分配为false
而不是"false"
。
*ngIf
vs [hidden]
*ngIf
[hidden]
修改display
属性,并且只指示浏览器不显示内容,但DOM仍然包含内容,则有效地从DOM中删除其内容。
*ngIf="myVar"
要么
[hidden]="!myVar"
这是显示/隐藏元素的两种方法。 *ngIf
和[hidden]
之间的唯一区别是: *ngIf
将添加或完全从DOM中删除元素,但是[hidden]
浏览器将使用CSS的display
属性来显示/隐藏元素,它将保留在DOM中。
对不起,我不同意使用Angular 2时被认为是不安全的隐藏的绑定。这是因为隐藏的样式可以很容易地覆盖,例如使用
display: flex;
推荐的方法是使用* ngIf更安全。 有关更多详细信息,请参阅官方的Angular博客。 5个新秀的错误,以避免angular2
<div *ngIf="showGreeting"> Hello, there! </div>
我发现自己在不同的情况下,比在我的情况下,元素是一个flex容器。如果不是你的情况一个简单的工作可能是
[style.display]="!isLoading ? 'block' : 'none'"
在我的情况下,由于我们支持的许多浏览器仍然需要供应商前缀,以避免问题,我去了另一个简单的解决scheme
[class.is-loading]="isLoading"
那么CSS在哪里很简单
&.is-loading { display: none }
离开,然后显示默认类处理的状态。
如果你的情况是样式显示没有,你也可以使用ngStyle指令,并直接修改显示,我做了一个引导DropDown UL上它被设置为显示无。
所以我创build了一个“手动”切换UL显示的点击事件
<div class="dropdown"> <button class="btn btn-default" (click)="manualtoggle()" id="dropdownMenu1" > Seleccione una Ubicación <span class="caret"></span> </button> <ul class="dropdown-menu" [ngStyle]="{display:displayddl}"> <li *ngFor="let object of Array" (click)="selectLocation(location)">{{object.Value}}</li> </ul> </div>
然后在组件上,我showDropDown:布尔属性,我每次切换,并根据int,设置displayDDL为样式如下
showDropDown:boolean; displayddl:string; manualtoggle(){ this.showDropDown = !this.showDropDown; this.displayddl = this.showDropDown ? "inline" : "none"; }
根据ngShow和ngHide的 Angular 1文档,这两个指令都添加了CSS样式display: none !important;
,根据该指令的条件(对于ngShow将该CSS添加到false值,并为ngHide添加该CSS为真值)元素。
我们可以使用Angular 2的指令ngClass来实现这个行为:
/* style.css */ .hide { display: none !important; } <!-- old angular1 ngShow --> <div ng-show="ngShowVal"> I'm Angular1 ngShow... </div> <!-- become new angular2 ngClass --> <div [ngClass]="{ 'hide': !ngShowVal }"> I'm Angular2 ngShow... </div> <!-- old angular2 ngHide --> <div ng-hide="ngHideVal"> I'm Angular1 ngHide... </div> <!-- become new angular2 ngClass --> <div [ngClass]="{ 'hide': ngHideVal }"> I'm Angular2 ngHide... </div>
请注意,对于Angular2中的show
行为,我们需要添加!
(不)之前的ngShowVal,并hide
在Angular2中的行为,我们不需要添加!
(不)在ngHideVal之前。
使用隐藏像你绑定任何模型与控制,并指定它的CSS :
HTML:
<input type="button" class="view form-control" value="View" [hidden]="true" />
CSS:
[hidden] { display: none; }
<div hidden="{{ myExpression }}"> <div [hidden]="myExpression">
myExpression可能设置为true或false
如果你使用Bootstrap就像这样简单:
<div [class.hidden]="myBooleanValue"></div>