1

我尝试使用 ng-if,但 angular 没有编译他。查看测试代码:

<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;
    }

如果运行此页面,我们可以在“Li”中看到“ddd”,尽管测试返回 false。

下一步,我替换为 "ng-if" "ng-show" :

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

它的工作,“ddd”隐藏。为什么 ng-if 不能在工作 ng-show 的地方工作?

4

2 回答 2

1

ngIf 指令基于 {expression} 删除或重新创建 DOM 树的一部分。如果分配给 ngIf 的表达式的计算结果为 false 值,则从 DOM 中删除该元素,否则将该元素的克隆重新插入 DOM。


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

于 2014-09-01T20:23:05.227 回答
0

可能是范围问题,子范围中是否有某些东西可能会覆盖 的值test?ng-if 对我来说很好(plunker)。我假设其他一切工作正常,您是否d在控制台中看到 ' ' 表明您的函数正在执行?

尝试将您的标签更改为此以帮助调试,您应该会看到它是一个函数:

<span ng-if="test()">test is: {{test.toString()}}</span>
于 2014-09-01T23:06:17.930 回答