6

Có cách nào để truy cập liệu nhóm accordion có mở hay không? Tôi biết có isOpen chỉ thị nhưng tôi không chắc chắn nếu có một cách để truy cập vào trạng thái của điều đó trong khi hoàn toàn trong html. Sử dụng (và lạm dụng?) Hai cách ràng buộc tôi có thể thiết lập một biến để giữ trạng thái đó nhưng nó sẽ không làm việc ra cho accordions lồng nhau mà không làm một cái gì đó như isOpen0, isOpen1, isOpen2, vv Tôi cũng có thể sử dụng ng-init để "tuyên bố" mới isOpen trên phạm vi của accordions lồng nhau nhưng điều đó không có vẻ giống như một ý tưởng tốt.Angularjs Accordion Access isOpen State

<accordion> 
    <accordion-group is-open="isOpen"> 
     <accordion-heading> 
     <div ng-class="{'myClass': isOpen}">Static Text</div> 
     </accordion-heading> 
     This content is straight in the template. 
    </accordion-group> 
    </accordion> 

http://plnkr.co/edit/l5y4raei99pedNWcE225

Trả lời

11

Trước tiên, bạn phải sử dụng một đối tượng cha like in Angular UI's docs' example, status đối tượng ví dụ:

<div accordion-group="" ng-init="status = {isOpen: false}" is-open="status.isOpen"> 
     <div accordion-heading=""> 
      <div ng-class="{'is-open': status.isOpen}">NUTRIENT PROFILES</div> 
     </div> 
     ... 
    </div> 

Sau đó, bạn hoàn toàn có thể sử dụng cùng một đối tượng tên cho accordion lồng nhau . Lý do rất đơn giản: chỉ thị accordion-group sẽ khởi tạo một phạm vi mới cho mỗi nhóm. Bằng cách này, khi một số status.isOpen bị thay đổi, nó sẽ không ảnh hưởng đến các nhóm khác.

Kiểm tra: http://plnkr.co/edit/nJ654pvE1itnGDQGp2rk?p=preview

+0

Tuyệt vời hoạt động theo cách này. Trong quá trình lặp lại ** ng-repeat **, bạn thậm chí có thể thay thế bằng 'ng-init =" status = {isOpen: $ first} "' để mở phần tử đầu tiên. –