Javascript 未定义的ng绑定是否比ng绑定和ng show更昂贵?
假设toShowVarJavascript 未定义的ng绑定是否比ng绑定和ng show更昂贵?,javascript,angularjs,Javascript,Angularjs,假设toShowVarus未定义,哪个更昂贵 <span ng-bind="toShowVar" ng-show="toShowVar"></span> 或 如果变量未定义,后者显然不会在屏幕上打印任何内容。似乎更昂贵。因为toShowVar将绑定到span,即使其中没有任何内容。如果我们使用ng if=“toShowVar”,成本将很小,由于角度元素不包括DOM中的span元素,所以按降序给予它们 似乎更昂贵。因为toShowVar将绑定到span,即使其
us未定义,哪个更昂贵
<span ng-bind="toShowVar" ng-show="toShowVar"></span>
或
如果变量未定义,后者显然不会在屏幕上打印任何内容。
似乎更昂贵。因为toShowVar
将绑定到span
,即使其中没有任何内容。如果我们使用ng if=“toShowVar”
,成本将很小,由于角度元素不包括DOM中的span
元素,所以按降序给予它们
似乎更昂贵。因为toShowVar
将绑定到span
,即使其中没有任何内容。如果我们使用ng if=“toShowVar”
,这将有点昂贵,因为角度元素不包括DOM中的span
元素。因此按降序给予它们
如果使用ng bind=“toShowVar”
则ng show=“toShowVar”
将无效,因为如果toShowVar
未定义,则使用ng bind
足以使span
呈现空内容
因此,由于在ng show=“toShowVar”
中进行了第二次无用的测试,使用这两种方法的成本将更高,因为它将再次检查toShowVar
的值,然后尝试将类.ng hide
添加到元素中
但是不同之处在于,仅使用ng bind
时,span将在页面中呈现空内容,使用ng show
将呈现span,但使用dispaly:none
from.ng hide
类。如果使用ng bind=“toShowVar”
则使用ng show=“toShowVar”
将是无用的,因为如果toShowVar
未定义,则使用ng bind
足以使span
呈现空内容
因此,由于在ng show=“toShowVar”
中进行了第二次无用的测试,使用这两种方法的成本将更高,因为它将再次检查toShowVar
的值,然后尝试将类.ng hide
添加到元素中
但是不同之处在于,仅使用ng bind
将在页面中呈现空白内容的范围,而使用ng show
将呈现空白内容,但使用dispaly:none
从.ng hide
类来解释这一点,首先,ng show
和ng bind
都以相同的优先级运行。没有任何东西支持ng show
来提高性能
在这里隐藏内容ng show
完全不是必需的。ng show还将开始观看相同的节目(此处为toShowVar
),并将在其注册的观看者上执行(通过添加ng hide类将display属性更改为none)。
为了进一步解释,如果使用ng show='false'
并在进一步的操作中将toShowVar
更改为某些文本,并通过调试器工具访问DOM
,则可以检查更新的文本是否仍然可用。因此,很明显,ng show不会在这里增加任何性能优势。
如果您使用ng If
(以高于两者的优先级运行),它将从DOM
中删除元素,并且后续的观察程序在重新呈现到DOM之前不会处于活动状态,因此即使在ng If
的情况下,您也会运行一些额外的内容,因此,它不会像ngbind
那样快,而是比ngbind
和ngshow
thgother快
注意:只有ng bind
和ng bind ng show
可以在UI中有所不同,如果跨度对UI中可见的CSS(可能是内联、层次结构父级或任何)有一定影响,即使它是空的(类似于边框),否则,外观和感觉都是相同的 为了解释这一点,首先,ng show
和ng bind
以相同的优先级运行。没有任何东西支持ng show
来提高性能
在这里隐藏内容ng show
完全不是必需的。ng show还将开始观看相同的节目(此处为toShowVar
),并将在其注册的观看者上执行(通过添加ng hide类将display属性更改为none)。
为了进一步解释,如果使用ng show='false'
并在进一步的操作中将toShowVar
更改为某些文本,并通过调试器工具访问DOM
,则可以检查更新的文本是否仍然可用。因此,很明显,ng show不会在这里增加任何性能优势。
如果您使用ng If
(以高于两者的优先级运行),它将从DOM
中删除元素,并且后续的观察程序在重新呈现到DOM之前不会处于活动状态,因此即使在ng If
的情况下,您也会运行一些额外的内容,因此,它不会像ngbind
那样快,而是比ngbind
和ngshow
thgother快
注意:只有ng bind
和ng bind ng show
可以在UI中有所不同,如果跨度对UI中可见的CSS(可能是内联、层次结构父级或任何)有一定影响,即使它是空的(类似于边框),否则,外观和感觉都是相同的 '如果您使用ng bind=“toShowVar”则ng show=“toShowVar”将毫无用处,因为如果toShowVar未定义,则使用ng bind足以隐藏span。'我认为这是不对的。span
元素将存在,而与ng bind变量的值无关。@Mr.niks是的,您是对的,我只是没有正确地解释它,我重新格式化了它:因为如果toShowVar没有定义,使用ng bind就足以呈现一个包含空内容的span,如果使用ng bind=“toShowVar”则显示ng
<span ng-bind="toShowVar"></span>