我试图理解ng if和ng show之间的区别,但在我看来它们是一样的。
选择使用其中一种或另一种有什么区别吗?
ng-if
指令从页面中删除内容,ng-show/ng-hid
使用CSSshow
属性隐藏内容。
如果要使用伪选择器来设置样式,这将非常有用。
也许一个有趣的观点是,两者之间的优先级不同。
就我所知,ng if指令是所有角度指令中优先级最高(如果不是最高的话)的指令之一。这意味着:它将首先运行在所有其他优先级较低的指令之前。它首先运行的事实意味着,在处理任何内部指令之前,有效地删除了元素。或者至少:这就是我对它的理解。
我在为当前客户构建的用户界面中观察并使用了它。整个用户界面都很拥挤,到处都是ng show和ng hide。不需要太多细节,但我构建了一个通用组件,可以使用JSON配置进行管理,因此我必须在模板内进行一些切换。存在一个ng repeat,在ng repeat内部显示一个表,其中有许多ng显示、ng隐藏,甚至存在ng开关。他们希望在列表中显示至少50个重复,这将导致或多或少需要解决1500-2000个指令。我检查了代码,前面的Java后端自定义JS处理数据大约需要150ms,然后Angular在显示之前会在上面咀嚼大约2-3秒。客户没有抱怨,但我很震惊:-)
在我的搜索中,我偶然发现了ng-if指令。现在,也许最好指出,在构思这个UI的时候,没有ng-if可用。因为ng-show和ng-隐藏中包含函数,返回布尔值,所以我可以很容易地将它们全部替换为ng-if。这样做,所有内部指令似乎都不再被评估。这意味着我回到了所有被评估指令的三分之一左右,因此,UI加速到大约500ms-1秒加载时间。(我无法确定确切的秒数)
请注意:指令没有被评估的事实,是对下面发生的事情的有根据的猜测。
因此,在我看来:如果您需要元素出现在页面上(即:用于检查元素或其他),但只需要隐藏,请使用ng show/ng hide。在所有其他情况下,如果使用ng。
ngIf指令根据表达式删除或重新创建DOM树的一部分。如果分配给ngIf的表达式的计算结果为假值,则该元素将从DOM中删除,否则该元素的克隆将重新插入DOM。
<!-- when $scope.myValue is truthy (element is restored) -->
<div ng-if="1"></div>
<!-- when $scope.myValue is falsy (element is removed) -->
<div ng-if="0"></div>
当使用ngIf删除一个元素时,其作用域将被破坏,并在恢复该元素时创建一个新的作用域。在ngIf中创建的作用域使用原型继承从其父作用域继承。
如果ngModel
在ngIF
中用于绑定到父范围中定义的JavaScript原语,则对子范围内的变量所做的任何修改都不会影响父范围中的值,例如。
<input type="text" ng-model="data">
<div ng-if="true">
<input type="text" ng-model="data">
</div>
要避免这种情况并从子范围内更新父范围中的模型,请使用对象:
<input type="text" ng-model="data.input">
<div ng-if="true">
<input type="text" ng-model="data.input">
</div>
或者,$parent
变量来引用父范围对象:
<input type="text" ng-model="data">
<div ng-if="true">
<input type="text" ng-model="$parent.data">
</div>
ngShow
指令根据提供给ngShow
属性的表达式显示或隐藏给定的超文本标记语言元素。通过在元素上删除或添加ng-隐藏
CSS类来显示或隐藏该元素。. ng-隐藏
CSS类在AngularJS中预定义,并将显示样式设置为无(使用!重要
标志)。
<!-- when $scope.myValue is truthy (element is visible) -->
<div ng-show="1"></div>
<!-- when $scope.myValue is falsy (element is hidden) -->
<div ng-show="0" class="ng-hide"></div>
当表达式的计算结果为false时,将CSS类添加到元素的class属性中,使其隐藏。当为true时,将从元素中删除ng hide CSS类,使元素看起来不隐藏。
问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型
问题内容: 今天,我按照一些说明在Linux中安装软件。有一个脚本需要首先运行。它设置一些环境变量。 指令告诉我要执行,但是我执行错误了。因此未设置环境。最后,我注意到了这一点并继续进行。 我想知道这两种调用脚本方法的区别。我对Linux完全陌生,所以请尽可能详细。 问题答案: 运行脚本,将启动一个新的运行脚本的外壳。新的外壳程序不会影响启动脚本的父外壳程序。 是的简写形式,它将在当前shell中
问题内容: 我刚开始使用Spring。我遇到了很多教程。我看到使用更多的例子比。我查看了Spring文档,但无法弄清楚使用其中一个的好处。有人可以提供一些解释吗? 问题答案: 是的便捷子类。 JavaDoc描述了一些添加的属性,这些属性在某些情况下可能有用: UrlBasedViewResolver的便利子类,它支持InternalResourceView(即Servlet和JSP)以及诸如Jst
问题内容: 我刚刚看到了包含标签的CSS代码。我看着MDN看看是什么,但我真的不明白。 有人可以解释它是如何工作的吗? 它会在我们通过CSS选择之前创建DOM元素吗? 问题答案: 根据这些文档,它们是等效的: 唯一的区别是CSS3中使用了双冒号,而单冒号是旧版本。 推理: CSS 3中引入了:: before表示法,以便在伪类和伪元素之间建立区别。浏览器还接受:在CSS 2中引入的表示法。
问题内容: 以下哪个更好? 要么 我知道的唯一区别是,当“ a”为null时,第一个返回false,而第二个抛出异常。除此之外,它们是否总是给出相同的结果? 问题答案: 使用时,你需要B在编译时知道类。使用时可以是动态的,并且可以在运行时更改。
问题内容: 根据MDN: 在许多情况下,revert关键字的工作原理与未设置的关键字完全相同。唯一的区别是属性具有由浏览器或用户创建的自定义样式表(在浏览器侧设置)设置的值。 我不了解浏览器和自定义样式表。浏览器和自定义样式表也都可以替换,对吗? 问题答案: 从MDN: 如果未设置CSS关键字从其父级继承,则将其重置为继承的属性,如果不是,则将其重置为初始值。换句话说,在第一种情况下,其行为类似于
问题内容: 从文档中,我们可以了解有关该功能的以下信息: 处理所有待处理的事件,调用事件回调,完成所有待处理的几何图形管理,根据需要重新绘制窗口小部件,并调用所有待处理的空闲任务。此方法应谨慎使用,因为如果从错误的位置(例如,从事件回调内部,或者从可以以任何方式从事件回调中调用的函数等)调用,则可能导致真正令人讨厌的竞争状况。 )。如有疑问,请改用。 另一方面,关于此功能: 调用所有待处理的空闲任
问题内容: 和CSS 之间有什么区别?可以使用吗? 我看到不同的开发人员在这两种方式上都这样做,而且由于我是自学成才的,所以我从来没有真正想过。 问题答案: 必须是唯一的,才能应用于许多事物。在CSS中,看起来像和元素看起来像 通常,只要您要引用特定元素,并且在有很多相似的事物时使用。举例来说,常见的元素之类的东西,,。常见元素是或。 但是,您应该了解的最基本的优先级是选择器优先于选择器。如果您有