2014-09-01 30 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>