2013-06-17 23 views
57

Tôi đang cố gắng thêm lớp vào phần tử nếu jobSet chưa được chọn để phê duyệt sử dụng biểu thức.Biểu thức góc nếu mảng chứa

<li class="approvalUnit" ng-repeat="jobSet in dashboard.currentWork" ng-class="{-1:'approved'}[selectedForApproval.indexOf(jobSet)]"> 

Đây không phải là phương pháp chứng minh rõ ràng. Bất kỳ đề xuất về cách tôi nên làm điều này?

Trả lời

111

Bạn có thể thực hiện điều này với một cú pháp hơi khác nhau:

ng-class="{'approved': selectedForApproval.indexOf(jobSet) === -1}" 

Plnkr

+0

này nên = đúng không? http://jsfiddle.net/ARK5q/361/ – nilloc

15

Bạn không nên quá tải các mẫu với logic phức tạp, đó là một thực tế xấu. Hãy nhớ luôn luôn giữ nó đơn giản!

Cách tiếp cận tốt hơn sẽ được giải nén logic này vào chức năng tái sử dụng trên $rootScope của bạn:

.run(function ($rootScope) { 
    $rootScope.inArray = function (item, array) { 
    return (-1 !== array.indexOf(item)); 
    }; 
}) 

Sau đó, sử dụng nó trong mẫu của bạn:

<li ng-class="{approved: inArray(jobSet, selectedForApproval)}"></li> 

Tôi nghĩ rằng mọi người sẽ đồng ý rằng ví dụ này dễ đọc hơn và dễ bảo trì hơn.

0

Một nơi nào đó trong quá trình khởi tạo của bạn, hãy đặt mã này.

Array.prototype.contains = function contains(obj) { 
    for (var i = 0; i < this.length; i++) { 
     if (this[i] === obj) { 
      return true; 
     } 
    } 
    return false; 
}; 

Sau đó, bạn có thể sử dụng nó theo cách này:

<li ng-class="{approved: selectedForApproval.contains(jobSet)}"></li> 
Các vấn đề liên quan