2015-06-09 14 views
15

Tôi đang cố sử dụng thuộc tính Ẩn trong Angular2 và khi tôi bao gồm một kiểu làm thay đổi hiển thị DIV, thuộc tính ẩn bị bỏ qua.Angular2 Ẩn Bỏ qua

Khi mã bên dưới được chạy, cả hai div được hiển thị. Khi tôi xóa lớp .displayHãy nhập DIV đầu tiên bị ẩn và dấu thứ hai được hiển thị (như mong đợi).

Tôi có thể sử dụng Ẩn và CSS hiển thị cùng nhau không?

import {ComponentAnnotation as Component, ViewAnnotation as View, bootstrap, NgIf} from 'angular2/angular2'; 

@Component({ 
    selector: 'hello' 
}) 
@View({ 
    template: `<style>.displayInline{ display:inline }</style><span *ng-if="name">Hello, {{name}}!</span> 
    <div> 
       <div [hidden]="hideDiv1()" class="displayInline">should be hidden.</div> 
       <div [hidden]="hideDiv2()" class="displayInline">should be displayed.</div> 
    </div>`, 
    directives: [NgIf] 
}) 
export class Hello { 
    name: string = 'World'; 
    constructor() { 
     setTimeout(() => { 
      this.name = 'NEW World' 
     }, 2000); 
    } 

    hideDiv1(){ 
     return true; 
    } 

    hideDiv2(){ 
     return false; 
    } 
} 

bootstrap(Hello); 

Repository: https://github.com/albi000/ng2-play

+0

Xem thêm http://stackoverflow.com/a/35578093/873282 – koppor

Trả lời

15

Lưu ý: mặc định <span> 's để "display: inline", bạn có thể muốn sử dụng chúng để thay thế.

Hiện tại, các lớp sẽ ghi đè [ẩn]. Tôi đồng ý, điều này không hiệu quả như ng-hide/ng-show và tôi hy vọng nó sẽ được sửa trong các phiên bản tương lai của angular2. Hiện tại là an open on issue on the Angular2 repo.

Bạn có thể khắc phục sự cố bằng cách chỉ cần gói phần tử [ẩn] của bạn với lớp học.

<span class="someClass"> 
    <span [hidden]="hideDiv1()">should be hidden.</span> 
</span> 
+0

Sự cố đã tham chiếu đã bị đóng và tôi nghi ngờ vấn đề này đã được thực hiện với một số tác vụ 'aria-hidden'. Tôi đã yêu cầu làm rõ. Xem [sự khác biệt] (https://www.paciellogroup.com/blog/2012/05/html5-accessibility-chops-hidden-and-aria-hidden/). – Stajs

+0

Nó hoạt động nhưng nếu chúng ta viết thẻ 'span' bên trong một' tr' của một 'bảng' nó phá vỡ hàng của bảng. Làm thế nào tôi có thể sửa lỗi này? – essaji

10

Bạn có thể sử dụng style.display thay vì hidden nếu bạn cần kiểm soát nhiều hạt mịn trên tầm nhìn.

<div [style.display]="active?'inherit':'none'"></div> 
+0

Điều này là rất tốt để thay thế hiệu quả * ngIf = "hoạt động" khi div có một thành phần lồng nhau cần phải được khởi động –

28

tôi phải đối mặt với vấn đề tương tự với lớp btn của bootstrap

<button [hidden]="!visible" class="btn btn-primary">Click</button> 

tôi giải quyết điều này bằng cách thêm

[hidden] { 
    display: none; 
} 

vào cuối css stylesheet tôi sử dụng trên toàn cầu. Điều này đã giải quyết được vấn đề ngay bây giờ.

+0

Điều này là tốt nhưng, dựa vào độ đặc hiệu. Trong trường hợp của tôi nó không hoạt động vì nó đã bị quá tải. – Kugel

+4

bạn có thể sử dụng 'display: none! Important;' vẫn còn –

+0

hoạt động tốt! Cảm ơn –

Các vấn đề liên quan