AngularJS angular.equals, работающие по-разному на нг-шоу

У меня есть эти строки в моем контроллере

$scope.VLANEnabledServers = {};
$scope.myEmpty = {};
console.log(angular.equals($scope.myEmpty, $scope.VLANEnabledServers));

и это ng-show в шаблоне

<table ng-show="!angular.equals(myEmpty, VLANEnabledServers)" ng-cloak class="table table-striped table-bordered ng-hide">

angular.equals функция в контроллере печатает TRUE что правильно. Но по мнению, где условие в ng-show должно быть !TRUE table отображается в любом случае

Я делаю что-то неправильно?

2 ответа

Решение

ngShow Директива принимает угловое выражение в качестве атрибута.

Угловое выражение ограничено в том, что оно может содержать, и, хотя иногда оно выглядит как javascript, на самом деле это не так. См. Связанную страницу для получения дополнительной информации о том, что является и не является допустимым угловым выражением.

Скорее всего, вы захотите создать в области видимости функцию, которая сделает за вас сравнение, а затем вызвать эту функцию из вашего выражения:

$scope.isEmptyObject = function (item){
  return angular.equals( {} , item );
}

С:

<table ng-show="!isEmptyObject(VLANEnabledServers)">

Давайте сохраним эту логику в контроллере, и она будет работать (ваш дом не сможет оценить объекты, которые вы отправляете в функцию equals по-вашему)

$scope.VLANEnabledServers = {};
$scope.myEmpty = {};
$scope.showme = function() {
    return angular.equals($scope.VLANEnabledServers , $scope.myEmpty);
}

<table ng-show="!showme()" ng-cloak class="table table-striped table-bordered ng-hide">
Другие вопросы по тегам