angularjs – 无法在角度引导模态窗口中引用kendo网格
发布时间:2020-12-17 17:20:08 所属栏目:安全 来源:网络整理
导读:我试图引用放置在bootstrap模式使用的模板中的kendo网格.直接放置在app控制器的范围内时,同一网格可以工作,但会从模态实例控制器中抛出未定义的错误. 有人可以告诉我我做错了什么. var app = angular.module('plunker',['ui.bootstrap','kendo.directives'])
我试图引用放置在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:'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 解决方法
在模态之外,控制器和网格共享相同的范围.但是当它们位于模态内时,网格的范围嵌套在控制器范围内.不完全确定为什么会这样,但这就是为什么它是一个问题.
当您具有嵌套作用域时,子作用域将原型继承父作用域.在直接在子作用域上设置某些内容时,通过原型继承,它不会覆盖父作用域.因此,当Kendo设置$scope.myTempGrid时,它只会在子范围上设置,当您尝试从控制器访问它时,它不存在. 这可能会让人感到困惑,但幸运的是,如果你总是避免将内容直接绑定到范围,那么就不应该遇到这类问题.例如,如果您将网格放在父作用域中的某个容器对象中,那么您将不会遇到此问题. 例如:http://plnkr.co/edit/0VFJfp?p=preview 控制器: ... $scope.container = {}; ... HTML ... <div kendo-grid="container.myTempGrid"> ... 更好的解决方案是始终使用’controller as’语法:http://plnkr.co/edit/Pmjend?p=preview (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |