【问题标题】:Kendo UI and angular - no widget in $scopeKendo UI 和 Angular - $scope 中没有小部件
【发布时间】:2015-01-09 08:59:28
【问题描述】:

我正在使用 Kendo UI 版本 2014.2.716 和 AngularJS 版本 1.2.27,我使用指令制作了一个网格

<div ng-controller="MyController as ctrl">
    <div id="myGrid" kendo-grid k-options="{some options}"></div>
    <button ng-click="ctrl.doSomething()"></div>
</div>

我了解到,如果您为网格命名(例如:kendo-grid="myGridOnScope"),您可以通过以下方式访问控制器范围内的小部件:

myModule.controller('MyController', function($scope) {
   this.doSomething = function() {
       console.log($scope.myGridOnScope);
   }
}

console.log 应该记录一个小部件对象,但在我的例子中它是未定义的。我究竟做错了什么?感谢您的帮助

【问题讨论】:

  • 你需要修改代码为
  • 如果你仔细阅读你会发现我说我试过了.. 但无论如何问题已经回答了

标签: angularjs kendo-ui


【解决方案1】:

我自己发现了问题,所以如果有人有同样的问题,我会发布一个答案。如果你在 AngularJS 中使用 controllerAs 语法,你不能只写小部件的名称 - 你必须在它前面加上你的控制器别名。

看看这个例子:

<div ng-controller="MyController as ctrl">
    <div kendo-grid="myGridName"></div>
</div>

这不会为您提供$scope 上的网格对象 - 为此您需要添加ctrl 前缀:

<div ng-controller="MyController as ctrl">
    <div kendo-grid="ctrl.myGridName"></div>
</div>

现在您可以像这样访问控制器中的小部件:

angular.module('MyModule',['kendo.directives'])
    .controller('MyController', function($scope){
        // this gives you the widget object
        console.log(this.myGridName);

        // however, this doesn't work
        console.log($scope.myGridName);
});

我希望我对这篇文章有所帮助。 干杯,

【讨论】:

  • 你是英雄!我花了很多时间来解决这个问题!现在我在控制器的开头有$scope.grid = this.grid 并且问题解决了:) 注意kendo-grid=myGridName 对我有用(不添加控制器)
  • 难怪只有一个网格在页面上不能正常工作。小时工,HOURSSS。谢谢
【解决方案2】:

尝试等待 Kendo 发出的事件。

HTML

<div kendo-grid="grid" options="gridOptions"></div>

Javascript

$scope.$on("kendoWidgetCreated", function(event, widget){
    if (widget === $scope.grid) {
        console.log($scope.grid);
    }
});

编辑: See this Plunker

【讨论】:

  • 它不记录任何小部件。如果我在没有 if 条件的情况下尝试它,它会记录我的网格,但 $scope 上仍然没有任何内容。
【解决方案3】:

这是因为 angular 太快了,当您尝试设置选项时,kendo 元素不存在。

我用手表解决了这个问题。

这是我的html代码:

<div kendo-grid="ListDesign"></div>

这是我的角度代码

 $scope.$watch('ListDesign', function () {
        if ($scope.ListDesign != undefined) {
            var gridOptions = {
                columns: columns,
                sortable: {
                    mode: 'multiple',
                    allowUnsort: true
                }
            };
            $scope.ListDesign.setOptions(gridOptions);
            $scope.ListDesign.setDataSource(dataSource);
        }
    });

这是否回答了您的问题?

【讨论】:

  • 遗憾的是它不起作用,我尝试 $watching 来查看小部件,但它总是未定义...我担心它必须与 Angular 的版本有关 - 哪个版本的 Kendo 和 Angular你用吗?
  • 昨天我更新了我的剑道版本,它仍然按照我解释的方式工作。现在我使用Kendo UI v2014.3.1316AngularJS v1.3.5。首先我包括我的jQuery v.2.1.3,然后是我的角度,然后是 kendo.all.min.js 文件...
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2018-08-06
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多