2014-11-14 2 views
5

Я пытаюсь отобразить div, если объект не пуст. Используя this ответ, Im пытается использовать angular.equals проверить пустота, но это не ведет себя, как и ожидалосьВыполняет ли угловые выражения() угловые выражения?

var test = angular.module('test',[]); 
 

 
test.controller('testCtrl', ['$scope', function($scope){ 
 
    $scope.foo={}; 
 
    $scope.bar="bam" 
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="test"> 
 
    <div ng-controller="testCtrl"> 
 
    <div ng-show="!angular.equals(foo,{})">{{bar}}</div> 
 
    </div> 
 
</div>

Ожидание здесь является то, что значение bar покажет только если foo не равно пустой объект. Однако foo, очевидно, установлено {} и еще bar все еще показывает.

ответ

8

Если вы хотите получить доступ к angular объект из шаблонов или выражений, вы должны сделать его на сферу, где вы хотите использовать его , В этом случае вы можете поместить его в область testCtrl.

var test = angular.module('test',[]); 
 

 
test.controller('testCtrl', ['$scope', function($scope){ 
 
    $scope.angular = angular; 
 
    $scope.foo={}; 
 
    $scope.bar="bam" 
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="test"> 
 
    <div ng-controller="testCtrl"> 
 
    <div ng-show="!angular.equals(foo,{})">{{bar}}</div> 
 
    </div> 
 
</div>

Я вообще ставить коммунальные объекты на $rootScope, поэтому они доступны отовсюду.

+0

Можете ли вы доступ Корнескоп из углового выражения? –

+2

@DavidGrinberg вы можете получить доступ к чему-либо, определенному на корневом корешке, из углового выражения, плюс все остальные области, наследуемые от корнеплодов. Если вы измените JS на '$ rootScope.angular = angular;' пример в ответе будет вести себя одинаково. – Philipp

-1

Угловые функции не могут использоваться inline, AFAIK. Вы можете сделать равную проверку с помощью функции внутри контроллера и вернуть результат.

4

Ваше мнение ищет функцию в области, а $scope.angular.equals не существует. Вам нужно написать один, как это:

var test = angular.module('test', []); 
 

 
test.controller('testCtrl', ['$scope', 
 
    function($scope) { 
 
    $scope.foo = {}; 
 
    $scope.bar = "bam"; 
 
    $scope.isEmpty = function(obj) { 
 
     return angular.equals(obj,{}); 
 
    }; 
 
    } 
 
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="test"> 
 
    <div ng-controller="testCtrl"> 
 
    <div ng-hide="isEmpty(foo)">{{bar}}</div> 
 
    </div> 
 
</div>

6

уборщик способом было бы только добавить угловой равен метод к $ охвата:

var test = angular.module('test',[]); 

test.controller('testCtrl', ['$scope', function($scope){ 
    $scope.angularEquals = angular.equals; 
} 

Затем вы можете использовать метод Equals в шаблоне, как:

<div ng-show="!angularEquals(foo,{})">{{bar}}</div> 
+0

Любая минус этого? Я имею в виду, почему он не доступен уже, поскольку он кажется таким распространенным? –

+0

Нет, нет недостатков. Метод Угловой равный не добавляется к области по умолчанию, чтобы сохранить область малой и большую часть времени, достаточного для javascript. –

Смежные вопросы