Javascript AngularJS:ng repeat内的指令不尊重新订单

Javascript AngularJS:ng repeat内的指令不尊重新订单,javascript,angularjs,angularjs-directive,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Directive,Angularjs Ng Repeat,首先 基本上,我有一个指令,它将根据ng repeat中的一些信息插入一些元素。对于我的应用程序,我使用了一种非常类似的方法,它根据mime类型插入、或元素 您将看到,当在ng repeat使用的数组中对项目重新排序时,传递给pageStyle指令的项目不再是新订单的最新项目。它似乎保留了以前的位置 app.directive('pageStyle', function () { return { restrict: 'A', scope: { pageStyle

首先

基本上,我有一个指令,它将根据
ng repeat
中的一些信息插入一些元素。对于我的应用程序,我使用了一种非常类似的方法,它根据mime类型插入
元素

您将看到,当在
ng repeat
使用的数组中对项目重新排序时,传递给
pageStyle
指令的项目不再是新订单的最新项目。它似乎保留了以前的位置

app.directive('pageStyle', function () {
  return {
    restrict: 'A',
    scope: {
      pageStyle: '='
    },
    replace: true,
    link: function (scope, element, attrs) {
      var ele;
      switch (scope.pageStyle) {
        case 'bold':
          ele = angular.element('<b>bold</b>');
          break;
        case 'italics':
          ele = angular.element('<i>italics</i>');
          break;
        case 'strike':
          ele = angular.element('<strike>strikethrough</strike>');
          break;
      }
      element.append(ele);
    }
  };
});
app.directive('pageStyle',function(){
返回{
限制:“A”,
范围:{
页面样式:'='
},
替换:正确,
链接:函数(范围、元素、属性){
var-ele;
开关(scope.pageStyle){
大小写“粗体”:
ele=角度元素(“粗体”);
打破
斜体字:
ele=角度元素(“斜体”);
打破
“罢工”案:
ele=角度元素(“删除线”);
打破
}
元素追加(ele);
}
};
});

因此,我想我的主要问题是,当
ng repeat
中的顺序发生变化时,我如何让指令重新评估。

这是因为使用了“跟踪方式”“跟踪方式”导致不完全重新构建dom元素,因此提高了ng重复渲染的性能

您的问题需要重新渲染。因此,请删除“跟踪方式”。
您可以通过添加pageStyle范围变量上的watch来检查问题。这将使您清楚地了解这个问题。

谢谢,我错误地理解了
track by
的工作原理。我原以为只有当我想在标记中使用
$index
时才需要它,但事实证明它是被注入的!