2014-12-16 3 views
2

У меня есть эти строки в моем контроллере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 должно быть !TRUEtable отображается в любом случае

Я что-то не так?

ответ

6

директива ngShow принимает angular expression как атрибут ,

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

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

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

С:

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

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

$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">