如何在ngIf中测试函数是否存在

时间:2015-07-08 14:35:26

标签: angularjs

我试图隐藏/显示一些基于函数

的HTML
<div ng-if="!!someFunc"> .... </div>
<div ng-if="someFunc !== undefined"> .... </div>

DEMO

现在的问题是someFunc是否存在并不重要,它始终显示。有没有办法使这项工作或我应该在范围上创建另一个(布尔)变量?

更新:我这次以角度v1.3.14再现了问题here

4 个答案:

答案 0 :(得分:1)

这两种尝试都有效。你的小提琴肯定有问题。这是一个完整的例子:

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

app.controller('Ctrl', function($scope) {
  //$scope.someFunc = function() {};
});
<div ng-app="app" ng-controller="Ctrl">
  <div>Some func: {{ someFunc ? 'yup' : 'nope' }}</div>
  <div ng-if="!!someFunc">Has some func</div>
  <div ng-if="someFunc !== undefined">Has some func</div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.js"></script>

答案 1 :(得分:1)

你的AngularJs出了问题(可能太旧了)。 我已将其更新为新版(1.3.14)并且它有效 - http://jsfiddle.net/HB7LU/15068/

没有任何代码更改:

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

function MyCtrl($scope) { 
    //$scope.test = function () {};
}

答案 2 :(得分:1)

你的小提琴是使用角度1.0.1,它甚至不包含ng-if(在1.1.5版本中引入)。将外部资源更新为更新版本或使用预定义的小提琴框架之一(例如角度1.2)。

答案 3 :(得分:1)

正如其他人现在指出的那样,在Angular 1.0中,ng-if不存在。如果您必须继续使用Angular 1.0,请尝试使用ng-show。

编辑:我想说清楚,虽然在这种情况下ng-if和ng-show都能达到你想要的效果,但它们在幕后的行为却有所不同。简而言之,当ng-if表达式求值为&#34; false&#34;时,该元素将从DOM中删除。当ng-show表达式求值为false时,它只是更改元素的display属性。您可以详细了解here

&#13;
&#13;
var myApp = angular.module('myApp', []);

function MyCtrl($scope) {
  //$scope.test = function () {};
}
&#13;
<div ng-controller="MyCtrl">
  Is there a test function: {{!!test}}
  <div ng-show="!!test">CLOSE</div>
</div>
&#13;
&#13;
&#13;