Подтвердить что ты не робот

Фильтр Angularjs не равен нулю

Попытка отфильтровать элементы с определенным свойством, которое не равно null. Для:

var details = [{name:'Bill', shortDescription: null}, {name:'Sally', shortDescription: 'A girl'}]

Я хотел бы показать только один ли; один для салли. Это то, что я пробовал без успеха

<ul>
<li ng-repeat="detail in details | filter:{shortDescription:'!'}">
<p>{{detail.shortDescription}}</p>
</li>
</ul>

Любая идея, как я могу это сделать без создания настраиваемого фильтра? Или даже так, как будет выглядеть пользовательский фильтр?

4b9b3361

Ответ 1

Согласно https://github.com/angular/angular.js/issues/11573 для Angular >= 1.4, рекомендуется использовать '', который соответствует любому примитиву, кроме null/undefined.

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: ''}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

Ответ 2

Angular >= 1.3.16 до последнего (1.5.5 на момент написания/обновления) используйте '' (пустая строка) (или работает '!!')

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: ''}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

Пример: http://jsfiddle.net/TheSharpieOne/1mnachk6/


Angular >= 1.3.6 и <= 1.3.15 использовать '!null'

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: '!null'}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

Пример: http://jsfiddle.net/TheSharpieOne/4wxs67yv/


Angular >= 1.2 и <= 1.3.5 use '' (пустая строка) (или работает '!!')

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: ''}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

Пример: http://jsfiddle.net/TheSharpieOne/ovsqf17n/


Angular < 1,2 '!!'

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: '!!'}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

Пример: http://jsfiddle.net/TheSharpieOne/RGEdc/


В целом '!!' имеет лучшую поддержку, но '' (пустая строка) рекомендуется и предназначена для этого.

Ответ 3

Стоит отметить, что для использования решения с пустыми кавычками вам нужно оставить компаратор по умолчанию false. Вы, возможно, будете использовать для включения здесь в фильтры вашего контроллера, например:

const myAssessments = 
       this.filterFilter(this.assessments, {userId: this.user.id}, true);

Этот тип строкового фильтра не будет работать без окончательного true. Но вам нужно сбросить true или сделать его ложным для выполнения не нулевой проверки:

const activeAndHistoric = 
      this.filterFilter(filteredAssessments, {historicYear: ''}, false);

Ответ 4

Я думаю, что это легче читать

 <ul>
    <li ng-repeat="detail in details" ng-if="detail.shortDescription">
        <p>{{detail.shortDescription}}</p>
    </li>
 </ul>