Kendo 网格:在 Angular 指令中获取实例

Kendo Grid: getting an instance in a Angular directive

这直接来自 (还有一个问题,因此我认为应该是一个新的 post?)

上面的link显示了如何在Angular中获取网格实例(感谢Lars)

因此,在最后一个示例之后,我现在添加了以下指令..

<body>    
<div data-ng-app="app">     
<div data-ng-controller="Grid as vm">
        <div id='aa'>
    <div pckendo id='bb' kendo-grid='grid' 
       k-options="vm.options"></div>  
    </div>

 </div>
</div>      
</body> 

并在 .js 中添加

angular
.module("app", ["kendo.directives"])
.controller("Grid", Grid)
.directive('pckendo', PCKendo);
....
function PCKendo() {

function link(scope, element, attrs) {
    var instance = element;
    var vm = scope.vm;

    vm.msg = "";
    var grid = scope.grid;

}

return {
    link: link
}

完整示例请参阅 here

我不想在控制器中获取实例,而是想通过指令获取它(据我所知,这是进行事件处理等的更好位置)

我已经在那里尝试了一些东西,但一直无法获得网格实例,所以这里的任何进一步帮助都会很好。

提前致谢!

基本上你做同样的事情;您需要等待 kendoRendered 事件,例如像这样(请注意,此示例可能不符合 angular 最佳实践(重新隔离范围等)):

function PCKendo($timeout) {
    function link(scope, element, attrs) {
        scope.$on("kendoRendered", function (e) {
            scope.$apply(function () {
                scope.vm.setMessage("one col");
                scope.grid.hideColumn(1);
            });

            $timeout(function () {
                scope.$apply(function () {
                    scope.vm.setMessage("all cols");
                    scope.grid.showColumn(1);
                });
            }, 2000);
        });
    }

    return {
        link: link
    }
}

(demo)