Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript orderBy工作不正常_Javascript_Angularjs - Fatal编程技术网

Javascript orderBy工作不正常

Javascript orderBy工作不正常,javascript,angularjs,Javascript,Angularjs,我创建了3个组-priorty 1、2和3,并使用orderBy:priorty期望每个推送的任务都进入他们的组。但在我用更多的数据进行测试后,我发现在每个小组中都有奇怪的行为,他们没有正确分类 <input ng-model="taskName"/> <button ng-click="AddTask()">Push task</button> <li ng-repeat="task in tasks | orderBy:'priorty

我创建了3个组-priorty 1、2和3,并使用orderBy:priorty期望每个推送的任务都进入他们的组。但在我用更多的数据进行测试后,我发现在每个小组中都有奇怪的行为,他们没有正确分类

<input ng-model="taskName"/>
  <button ng-click="AddTask()">Push task</button>

    <li ng-repeat="task in tasks | orderBy:'priorty'">priorty {{task.priorty}} - {{task.taskName}}</li>

推送任务
  • priorty{{{task.priorty}}-{{task.taskName}
  • 新项目不是被推到底部,而是有时被推到顶部/中间,为什么会发生这种情况


    试试我的演示:

    根据
    优先级,项目总是以正确的顺序排列

    除此之外,对于相同优先级内的项目顺序没有要求(也没有保证)

    如果要进行第二级排序,可以将属性列表传递给
    orderBy
    过滤器:

    ng-repeat="task in tasks | orderBy:['priorty','taksName']"
    
    另请参见此


    关于您问题的“为什么”
    (如果您只按“优先级”订购,为什么会重新订购):

    它似乎是特定于浏览器的。Firefox上的相同代码在插入第9项后不会对这些项进行“重新排序”(Chrome也是如此)

    如果让我猜一猜,我会说这与每个浏览器(内部)保存一些元素引用的方式有关,并且在这一点上他们决定进行一些重新设置。

    我没有任何问题。任务总是按优先级排序。你的意思是在一个优先级组中,任务可以有任意的顺序吗?有趣的是,很明显,它们都具有相同的优先级
    1
    ,所以这看起来不像是
    不能正常工作的情况。您可以使用多重排序:
    orderBy:['priorty','taskName']
    按字母表中的每个字母,并注意当按'h'时会发生什么,当有9个具有相同优先级的元素时似乎会发生什么。这看起来是一个很好的解决方案!用taskId订购更好?因为它是到后端的链接,所以我总是希望最新推送的项目位于每个组的最底部。您可以根据您喜欢的任何属性进行订购
    taskId
    确实更有意义,但我在示例中没有使用,因为您似乎没有为新任务分配ID。在“真实”环境中,其他属性肯定更适合(例如创建日期、截止日期、ID等)。我的taskId是自动递增的,因此我认为最好使用它,兄弟,非常感谢您的回答@user3522457:我在“为什么”上添加了一个简短的注释。它似乎是特定于浏览器的。(我还查看了Angular的源代码,在
    ngRepeat
    的实现中找不到任何可能导致这种情况的东西,但我可能遗漏了一些东西。)顺便说一句,如果您真的喜欢,也可以随意向上投票:)