当前位置:  开发笔记 > 前端 > 正文

无法在角度引导模态窗口中引用kendo网格

如何解决《无法在角度引导模态窗口中引用kendo网格》经验,为你挑选了1个好方法。

我试图引用放置在bootstrap模式使用的模板中的kendo网格.直接放置在app控制器的范围内时,同一网格可以工作,但会从模态实例控制器中抛出未定义的错误.

有人可以告诉我我做错了什么.

var app = angular.module('plunker', ['ui.bootstrap', 'kendo.directives']);

app.controller('MainCtrl', function($scope, $modal) {
  $scope.name = 'World';

  $scope.mySource = new kendo.data.DataSource({
          data: [
            {ColumnOne:'One', ColumnTwo:'Two'},
            {ColumnOne:'Three', ColumnTwo:'Four'},
            {ColumnOne:'Five', ColumnTwo:'Six'}
            ]
  });

  $scope.myGridChange = function(){
     var selectedRows = $scope.myGrid.select();
     console.log($scope.myGrid.dataItem(selectedRows[0]));
  };

   $scope.items = ['item1', 'item2', 'item3'];

   $scope.open = function () {

    $modal.open({
      templateUrl: 'myGridTemplate.html', //'myTemplate.html',
      controller: ModalInstanceCtrl,
      resolve: {
        items: function () {
          return $scope.items;
        }
      }
    });
   };
});


var ModalInstanceCtrl = function ($scope, $modalInstance, items) {

  $scope.items = items;
  $scope.selected = {
    item: $scope.items[0]
  };

  $scope.myTempSource = new kendo.data.DataSource({
          data: [
            {ColumnOne:'One', ColumnTwo:'Two'},
            {ColumnOne:'Three', ColumnTwo:'Four'},
            {ColumnOne:'Five', ColumnTwo:'Six'}
            ]
  });

   $scope.myTempGridChange = function(){
     var selectedRows = $scope.myTempGrid.select();
     console.log($scope.myTempGrid.dataItem(selectedRows[0]));
  };

  $scope.ok = function () {
    $modalInstance.close($scope.selected.item);
  };

  $scope.cancel = function () {
    $modalInstance.dismiss('cancel');
  };
};

我得到了无法调用方法'select'的undefined at

var selectedRows = $scope.myTempGrid.select();

这是我的plnkr链接

http://plnkr.co/edit/GUSX6JR9HRvtdSWclvPl?p=preview



1> rob..:

在模态之外,控制器和网格共享相同的范围.但是当它们位于模态内时,网格的范围嵌套在控制器范围内.不完全确定为什么会这样,但这就是为什么它是一个问题.

当您具有嵌套作用域时,子作用域将原型继承父作用域.在直接在子作用域上设置某些内容时,通过原型继承,它不会覆盖父作用域.因此,当Kendo设置$ scope.myTempGrid时,它只会在子范围上设置,当您尝试从控制器访问它时,它不存在.

这可能会让人感到困惑,但幸运的是,如果你总是避免将内容直接绑定到范围,那么就不应该遇到这类问题.例如,如果您将网格放在父作用域中的某个容器对象中,那么您将不会遇到此问题.

例如:http://plnkr.co/edit/0VFJfp?p = preview

控制器:

...
$scope.container = {};
...

HTML

...
...

更好的解决方案是始终使用'controller as'语法:http://plnkr.co/edit/Pmjend?p = preview

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有