对于同时使用Kendo 和 Angular的人来说,这里有一个对我有用的解决方案:
这个想法是使用k-rebind 指令。从文档:
选项更改时的小部件更新
您可以从控制器更新小部件。使用特殊的 k-rebind 属性创建一个小部件,该小部件会在某些范围变量更改时自动更新。此选项将破坏原始小部件并使用更改的选项重新创建它。
除了像往常一样在 GridOptions 中设置列数组之外,我们还必须持有对它的引用:
vm.gridOptions = { ... };
vm.gridColumns = [{...}, ... ,{...}];
vm.gridOptions.columns = vm.gridColumns;
然后将该变量传递给 k-rebind 指令:
<div kendo-grid="vm.grid" options="vm.gridOptions" k-rebind="vm.gridColumns">
</div>
当您将网格绑定到远程数据(在我的例子中为 OData)时就是这样。现在,您可以在列数组中添加或删除元素。网格将在重新创建后再次查询数据。
当将 Grid 绑定到本地数据(对象的本地数组)时,我们必须以某种方式推迟数据的绑定,直到重新创建小部件。对我有用的(也许有一个更清洁的解决方案)是使用 $timeout 服务:
vm.gridColumns.push({ ... });
vm.$timeout(function () {
vm.gridOptions.dataSource.data(vm.myArrayOfObjects);
}, 0);
这已经使用 AngularJS v1.5.0 和 Kendo UI v2016.1.226 进行了测试。