Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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
Jquery 表中的列-角度JS_Jquery_Angularjs_Sorting_Tablesorter - Fatal编程技术网

Jquery 表中的列-角度JS

Jquery 表中的列-角度JS,jquery,angularjs,sorting,tablesorter,Jquery,Angularjs,Sorting,Tablesorter,我已经在angular js中创建了一个应用程序,用于使用angular js生成列和行表,以及使用插件对表进行排序。 该应用程序工作正常,但问题是,在该应用程序中,有四列是根据用户的首选项显示的,例如,在最初显示表后,排序工作正常,但当对列进行更改时,排序不适用于新列 在下面的代码中,我制作了一个关于此应用程序的模拟演示。最初,排序工作正常,但当单击changeDisplay按钮并显示新的两列时,排序未应用于这些新列(服务一、服务二) 谁能告诉我一些解决方法吗 html <div ng

我已经在angular js中创建了一个应用程序,用于使用angular js生成列和行表,以及使用插件对表进行排序。 该应用程序工作正常,但问题是,在该应用程序中,有四列是根据用户的首选项显示的,例如,在最初显示表后,排序工作正常,但当对列进行更改时,排序不适用于新列

在下面的代码中,我制作了一个关于此应用程序的模拟演示。最初,排序工作正常,但当单击changeDisplay按钮并显示新的两列时,排序未应用于这些新列(服务一、服务二)

谁能告诉我一些解决方法吗

html

<div ng-controller="Controller">
    <table border="1" id="mytable">
      <thead>
        <tr>
          <th>Work Name</th>
          <th>Team Name</th>
          <th>Place Name</th>
          <th ng-repeat="servopt in services|filter:{ display: 'block' }|orderBy:'order'">{{servopt.servicename}}</th>
          <th>Leader Name</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="val in datas">
          <td>{{val.workname}}</td>
          <td>{{val.teamname}}</td>
          <td>{{val.placename}}</td>
          <td ng-repeat="servopt in services|filter:{ display: 'block' }|orderBy:'order'">{{val[servopt.serviceid]}}</td>
          <td>{{val.leadername}}</td>
        </tr>
      </tbody>
    </table>
    <button ng-click="changeDisplay()">changeDisplay</button>
  </div>

工作名称
队名
地名
{{servopt.servicename}
领导姓名
{{val.workname}}
{{val.teamname}}
{{val.placename}}
{{val[servopt.serviceid]}
{{val.leadername}
变化显示
问题在于tablesorter插件确实如此。换句话说,即使删除所有Angle代码并尝试为表创建新列并刷新trablesorter,它也不会起作用

在这种情况下,您需要寻找一个替代插件,或者可能是一个仅角度的解决方案()

第二点是:

不要使用控制器来:

  • 操纵DOM-控制器应仅包含业务逻辑。 将任何表示逻辑放入控制器会显著影响 它的可测试性。Angular为大多数情况和指令提供数据绑定 封装手动DOM操作
为此目的使用指令

编辑:

根据,您可以在表上触发
updateAll
事件,但需要等待Angular digest运行并更新DOM,因此需要
setTimeout


您仍然应该将所有与DOM相关的逻辑移到一个指令中。

使用表排序器的fork,您可以在任何列数据发生更改后触发重新初始化表排序器()


现在我对angular js一无所知,因此如果在回调内部执行上述代码,而不是在
setTimeout
函数内部执行,则会更好地工作。

@Mottie是对的,这个事件似乎让您能够更新组件。在这种情况下,您要做的是将此逻辑移动到指令。
setTimeout(function(){
    // updateAll include the header in the update
    $('#mytable').trigger('updateAll');
}, 100);