Javascript 为什么“角度”定义为“角度”;“优先权”;在同一DOM元素上定义的指令的属性?

Javascript 为什么“角度”定义为“角度”;“优先权”;在同一DOM元素上定义的指令的属性?,javascript,angularjs,Javascript,Angularjs,我发现angular没有利用指令定义的顺序,而是使用静态优先级字段。它并不适合所有情况 例如: <div ng-if="items.length < 50" ng-repeat="item in items"></div> <div ng-repeat="item in items" ng-if="items.length > 50"></div> 这两行代码可能有不同的含义 案例1)检查项目数量是否小于50,ng重复10000

我发现angular没有利用指令定义的顺序,而是使用静态
优先级
字段。它并不适合所有情况

例如:

<div ng-if="items.length < 50" ng-repeat="item in items"></div>

<div ng-repeat="item in items" ng-if="items.length > 50"></div>

这两行代码可能有不同的含义

案例1)检查项目数量是否小于50,ng重复10000个项目

案例2)ng重复10000个项目,然后在每个元素上检查项目数量是否小于50

如果
ng如果
具有更高的优先级,那么第一行代码将允许明显非常重要的优化

显然,与按照指令定义的顺序对指令进行优先级排序相比,使用静态“优先级”字段的理由不多,因此我的问题是:

应该采取什么步骤来批准这个想法并付诸实施

(我从未研究过angularjs源代码,需要一些外部帮助来指出需要更改的地方,以便提供主题方法,我将感谢这方面的任何外部帮助)

提前谢谢你


编辑

下面是一个JSFIDLE,它显示
ng if
对于10000个项的数组执行20000次,每个
ng if
创建一个范围,使问题加倍

我找不到angular不利用指令定义顺序的原因,而不是使用静态优先级字段,它不适合所有情况

角度指令的思想是扩展浏览器内置的标记语言(标记、属性等)。我相信在标准浏览器标记中没有这样的功能。我想强调,angular中的指令是声明性编程

对于您指出的问题,在我看来,它类似于命令式编程。这就像在页面中使用
if
循环对逻辑进行编码一样。但是在您的情况下,在同一个元素上使用它们没有多大意义=>这与在任何命令式编程语言(c++、c#、java等)中在同一行上编写
if
for loop
非常相似。如果您遵循命令式编程思维,那么这样写会更有意义:

<div ng-if="items.length > 50">
    <div ng-repeat="item in items"></div>
</div>

我同意,有时为了编写UI呈现代码,我们必须编写一点类似命令式编程的代码,但可以将其保持在最低限度。即使在这种情况下,如果您遵循命令式编程的思维方式(就像我指出的那样),也不会有问题

因此,您指出的问题可能是一个问题,但与我们从声明性标记中获得的优势相比,实际上不是一个大问题

声明式编程和命令式编程各有优缺点:

对于扩展“标记”的指令而言,使用声明性编程更具意义,声明性编程是角度指令的设计方式(标记实际上是声明性的)

声明式编程的要点是告诉“您想要什么”,而不是告诉“如何”。这样做的好处是:更简单更容易理解

事实上,即使在不熟悉的环境中也能轻松理解代码 上下文是声明式样式的主要优点之一

声明式编程最显著的好处是 指定我们希望得到的结果,而不是如何得到。作为一个 因此,更重要的是要了解我们所处的领域 处理语言的每个细节

根据您的建议,更多的是关于您想如何完成任务。您的建议的缺点是,当我们使用指令时,我们需要了解它们是如何“在内部”工作的

例如:当您在同一元素上使用多个指令时,使用指令的人需要了解指令的顺序(这应该是执行指令的人所关心的)。这是声明式编程试图避免的事情,因为指令的用户很复杂

我找不到angular不利用指令定义顺序的原因,而不是使用静态优先级字段,它不适合所有情况

角度指令的思想是扩展浏览器内置的标记语言(标记、属性等)。我相信在标准浏览器标记中没有这样的功能。我想强调,angular中的指令是声明性编程

对于您指出的问题,在我看来,它类似于命令式编程。这就像在页面中使用
if
循环对逻辑进行编码一样。但是在您的情况下,在同一个元素上使用它们没有多大意义=>这与在任何命令式编程语言(c++、c#、java等)中在同一行上编写
if
for loop
非常相似。如果您遵循命令式编程思维,那么这样写会更有意义:

<div ng-if="items.length > 50">
    <div ng-repeat="item in items"></div>
</div>

我同意,有时为了编写UI呈现代码,我们必须编写一点类似命令式编程的代码,但可以将其保持在最低限度。即使在这种情况下,如果您遵循命令式编程的思维方式(就像我指出的那样),也不会有问题

因此,您指出的问题可能是一个问题,但与我们从声明性标记中获得的优势相比,实际上不是一个大问题