Cách phát hiện trạng thái hiện tại trong chỉ thị


86

Tôi đang sử dụng định tuyến của AngularUI và tôi muốn thực hiện ng-class="{active: current.state}"nhưng tôi không chắc làm thế nào để phát hiện chính xác trạng thái hiện tại trong một chỉ thị như thế này.

Câu trả lời:


115

Ngoài ra, bạn có thể sử dụng chỉ thị ui-sref-active :

<ul>
  <li ui-sref-active="active" class="item">
    <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a>
  </li>
  <!-- ... -->
</ul>

Hoặc bộ lọc: "stateName" | isState&"stateName" | includedByState


146

Cập nhật:

Câu trả lời này dành cho phiên bản cũ hơn nhiều của Ui-Router. Đối với các bản phát hành gần đây hơn (0.2.5+), vui lòng sử dụng chỉ thị trợ giúp ui-sref-active. Thông tin chi tiết tại đây .


Câu trả lời gốc:

Bao gồm dịch vụ $ state trong bộ điều khiển của bạn. Bạn có thể gán dịch vụ này cho một thuộc tính trong phạm vi của bạn.

Một ví dụ:

$scope.$state = $state;

Sau đó, để có được trạng thái hiện tại trong các mẫu của bạn:

$state.current.name

Để kiểm tra xem trạng thái hiện tại có đang hoạt động hay không:

$state.includes('stateName'); 

Phương thức này trả về true nếu trạng thái được bao gồm, ngay cả khi nó là một phần của trạng thái lồng nhau. Nếu bạn đang ở trạng thái lồng nhau user.detailsvà bạn đã kiểm tra $state.includes('user'), nó sẽ trả về true.

Trong ví dụ lớp học của bạn, bạn sẽ làm điều gì đó như sau:

ng-class="{active: $state.includes('stateName')}"

3
Còn đối với các trạng thái có tham số thì sao?
Bradley Trager


25

Nếu bạn đang sử dụng ui-router, hãy thử $ state.is ();

Bạn có thể sử dụng nó như vậy:

$state.is('stateName');

Theo tài liệu:

$ state.is ... tương tự như $ state.includes, nhưng chỉ kiểm tra tên tiểu bang đầy đủ.


1

Việc sử dụng chỉ thị ui-sref-active phù hợp với tôi là:

<li ui-sref-active="{'active': 'admin'}">
    <a ui-sref="admin.users">Administration Panel</a>
</li>

như được tìm thấy ở đây dưới bình luận có nhãn "tgrant59 nhận xét vào ngày 31 tháng 5 năm 2016".

Tôi đang sử dụng angle-ui-router v0.3.1.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.