Невозможно получить нг-повтор правильно

0

Сеть Chrome показывает это, когда нет сертификата для показа:

    user_certificates: []

Я пытаюсь показать кнопку "Добавить сертификат", когда нет сертификата для показа, но он не работает. Где я иду не так?

    <div ng-show="users.user_certificates == null">
        <div ng-click="newCertificate.editFlag = !newCertificate.editFlag" ng-init="newCertificate.editFlag=false">
            <span class="btn btn-default">Add Certificate</span>
        </div>
    </div>

FYI, это мой рабочий код, чтобы показать, когда есть сертификат:

    <div ng-repeat="certificate in user.user_certificates">
        <div ng-hide="certificate.editFlag">
            <strong>{{certificate.title}}</strong><br />
            {{certificate.description}}
        </div>
    </div>
Теги:

3 ответа

2
Лучший ответ

Просто попробуй

<div ng-show="users.user_certificates.length === 0">

Сравнение массива с нулем всегда возвращает false. Вот почему ваше ng-show не работает. Вы даже можете попробовать user_certificates.length[index] == null он будет сравнивать значение, хранящееся в заданном индексе, а не сравнивать весь массив. Вы можете использовать typeof для проверки того, задан ли массив или нет. подобно

if(typeof user_certificates.length === "undefined") {
  //Array is not defined
}
  • 0
    благодарю вас. работает с первым предложением :)
1

В JS пустой массив не равен нулю, например, если вы попробуете это в консоли:

a = [];
a == null

Вы получите ложное возвращение.
В равной степени из-за того, как объекты работают в JS, a == [] также будет ложным. То, что вы хотите, это что-то вроде линий a.length == 0

0

Я предпочитаю наблюдателя

$scope.$watch('user_certificates', function(newVal){
    $scope.hasCerts = !!newVal.length;
});




<div ng-hide="hasCerts">
    <div ng-click="showAddCertForm()">
        <span class="btn btn-default">Add Certificate</span>
    </div>
</div>
  • 0
    вам придется использовать $ scope. $ watchCollection, так как $ watch реагирует только на 'assiging' - напр. $ scope.user_certificates = newValue;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню