Bộ lọc Angular JS không bằng


83

Có vẻ như một câu hỏi rất cơ bản nhưng tôi không thể hiểu đúng cú pháp ..

<li class="list-group-item" ng-repeat="question in newSection.Questions | filter:Id != '-1'; " ng-mouseenter="hover = true" ng-mouseleave="hover = false">
    <div href="#" editable-text="question.Text">{{question.Text}}</div>
</li>

Tất cả những gì tôi muốn là hiển thị tất cả các câu hỏi mà id KHÔNG phải là -1. Tôi đang làm gì sai. Cảm ơn!


bạn cần viết một bộ lọc tùy chỉnh để kiểm tra câu hỏi.id! = -1. Ngoài ra tôi nghĩ lỗi của bạn là id là một thuộc tính của câu hỏi
SoluableNonagon

@EliteOctagon Bạn có thể làm được - hãy xem câu trả lời của tôi bên dưới.
Michael Rose

Bạn có nhìn vào tài liệu không? docs.angularjs.org/api/ng/filter/filter Trong phần expressionđược giải thích (p thứ hai tại Cách sử dụng -> đối số ) filter: {Id: "!-1"}hoặc một số cách nói như vậy thực hiện mẹo
Nebulosar

Câu trả lời:


165

Cú pháp chỉ khác một chút, hãy thử:

<li class="list-group-item"
    ng-repeat="question in newSection.Questions | filter:{ Id: '!-1'}"
    ng-mouseenter="hover = true" ng-mouseleave="hover = false">

    <div href="#" editable-text="question.Text">{{question.Text}}</div>
</li>

Xem một chút JSFiddle: http://jsfiddle.net/U3pVM/3845/

Biên tập:

Ví dụ với các biến:

<script> var invalidId = '-1'; </script>
<li class="list-group-item"
    ng-repeat="question in newSection.Questions | filter:{ Id: '!' + invalidId}"
    ng-mouseenter="hover = true" ng-mouseleave="hover = false">

    <div href="#" editable-text="question.Text">{{question.Text}}</div>
</li>

Điều này bằng cách nào đó cũng có thể hoạt động cho các biến? Sự sửa đổi nhỏ này của bạn đặt số lượng "không bằng nhau" vào một biến thay vì một hằng số và nó sẽ không hoạt động nữa.
Domi

Vâng, bạn có thể cần phải viết chức năng lọc của riêng mình, chúng ta hãy gọi nó checkForXvà sau đó sử dụng nó như ... | filter:checkForXvà trở về đúng hay sai nếu có một trận đấu ...
Michael Rose

@Domi, tôi đã đăng một câu trả lời chung hơn trả lời câu hỏi của bạn. Kiểm tra nó ra khi bạn có thời gian
Fernando Carvalhosa

1
@Tielman, không cần khai báo các biến phụ. Điều này hoạt động tốt: "filter: {id: '!' + notValid} "
Stalinko

11
Điều này cũng sẽ lọc ra bất kỳ chuỗi nào Idchứa -1dưới dạng chuỗi con, chẳng hạn như -11hoặc 2-1. Để kiểm tra một cách chắc chắn rằng Idcó phải không, -1bạn nên viết một hàm so sánh nhỏ và sử dụng hàm đó làm bộ lọc.
andypea

20

Mặc dù câu trả lời của @Michael Rose phù hợp với trường hợp này, nhưng tôi không nghĩ sẽ có hiệu quả nếu bạn cố gắng lọc không bằng một số đối tượng / biến

Trong trường hợp đó, bạn có thể sử dụng:

JS :

filterId = -1

HTML:

<li ng-repeat="question in newSection.Questions | filter: !{ Id: filterId}">
</li>

Một trường hợp lồng ghép hơn nữa:

JS :

someQuestion = {
   someObject: {
     Id: 1
   }
}
newSection.Questions = [someQuestion]

HTML

<li ng-repeat="question in newSection.Questions | filter: !{someObject : {Id: -1} }">
</li>

1
Cú pháp này không phù hợp với tôi:! {Id: -1} nhưng câu trả lời thay thế hoạt động tốt: {Id: '! - 1'}. Có lẽ đó là / là một sự khác biệt về phiên bản?
python1981

Có thể là. Phiên bản nào bạn đang sử dụng?
Fernando Carvalhosa
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.