Сеть 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>
Просто попробуй
<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
}
В JS пустой массив не равен нулю, например, если вы попробуете это в консоли:
a = [];
a == null
Вы получите ложное возвращение.
В равной степени из-за того, как объекты работают в JS, a == []
также будет ложным. То, что вы хотите, это что-то вроде линий a.length == 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>