2014-09-01 73 views
-1

我尝试使用ng-if,但是角度没有编译他。看看在测试代码:为什么angularjs忽略ng-if?

<ul class="tmmenu-admin-tabs-builder-panel-answer"> 
         <li class="tmmenu-admin-tabs-builder-panel-portlet" ng-repeat="answer in answers"> 
          <div> 
           <span ng-repeat="question in questions"> 
            <label ng-repeat="answer in question.answers"> 
             <input type="checkbox">{{question.id}}.{{answer.id+1}} 
             <span ng-if="test()">ddd</span> 
            </label> 
           </span> 
          </div> 
          <textarea>{{answer.text}}</textarea> 
         </li> 
        </ul> 

和功能测试:

$scope.test = function(){ 
     console.log('d'); 
     return false; 
    } 

如果运行这个页面,我们可以看到,尽管测试返回false的“礼”“DDD”。

下一步,我在取代 “NG-IF”, “NG-秀”:

<ul class="tmmenu-admin-tabs-builder-panel-answer"> 
    ... 
    <span ng-show="test()">ddd</span> 
    ... 
</ul> 

和工作, “DDD” 躲。为什么不工作在哪里工作ng显示?

+1

工作正常,在一个简单的非重复的情况。在plnkr.co或jsfiddle.net中创建一个演示程序,它可以复制问题 – charlietfl 2014-09-01 21:25:30

回答

0

ngIf指令根据{expression}删除或重新创建DOM树的一部分。如果赋值给ngIf的表达式求值为假值,那么该元素将从DOM中移除,否则将该元素的一个克隆重新插入到DOM中。


的ngShow指令显示或隐藏基于提供给所述ngShow属性表达给定的HTML元件。通过移除或添加ng-hide CSS类到元素来显示或隐藏该元素。 .ng-hide CSS类在AngularJS中预定义,并将显示样式设置为none(使用!重要标志)。对于CSP模式,请将angular-csp.css添加到您的html文件中(请参阅ngCsp)。

+0

好的,但是为什么不删除我的 ddd block?测试()所有时间返回false。 – 2014-09-01 20:42:43

0

可能是一个范围问题,有没有在子范围内可能会覆盖值为test? ng-if适合我(plunker)。我假设其他一切正常,您是否在控制台中看到'd'以表明您的函数正在执行?

试着改变自己的代码来此帮助调试,你应该看到它是一个功能:

<span ng-if="test()">test is: {{test.toString()}}</span>