AngularJS angular.equals在ng-show上的工作方式不同

时间:2014-12-16 14:42:59

标签: angularjs ng-show object-comparison

我的控制器中有这些行

$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仍会显示

我做错了吗?

2 个答案:

答案 0 :(得分:7)

ngShow指令将 angular expression 作为属性。

角度表达式在它可以包含的内容中受到限制,虽然它有时看起来像javascript,但实际上并非如此。有关什么是有效角度表达式的详细信息,请参阅链接页面。

您最有可能想要做的是在示波器上创建一个函数来为您进行比较,然后从您的表达式中调用该函数:

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

使用:

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

答案 1 :(得分:0)

让我们将这个逻辑保留在控制器中并且它可以工作(你的dom可以用你的方式评估发送给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">