如何用Angular模型构建Kendo Grid?AngularJS嵌套配置失效求助
解决AngularJS中嵌套对象存储Kendo Grid配置失效的问题
我来帮你搞定这个问题!你遇到的核心问题在于AngularJS的双向绑定对未初始化的嵌套对象追踪有局限,导致Kendo Grid指令无法正确识别到你后续赋值的配置。
问题根源
当你直接尝试给vm.test.mainGridOptions赋值时,如果初始状态下vm.test是undefined(也就是你没提前声明这个对象),AngularJS的脏检查机制无法追踪这个“不存在的对象的属性”变化。Kendo Grid指令在初始化时会读取绑定的k-options值,此时它看到的是undefined,之后你再给vm.test赋值并设置mainGridOptions,指令不会自动重新读取配置,所以网格就加载不出来。而直接用vm.mainGridOptions时,vm本身是控制器实例,始终存在,属性赋值会被AngularJS正确捕获,自然就能正常加载。
解决方案:提前初始化父对象
只需要在赋值网格配置之前,先把嵌套的父对象vm.test初始化出来,就能让AngularJS正确追踪后续的属性变化。
控制器代码示例
angular.module("KendoDemos", ["kendo.directives"]) .controller("MyCtrl", function() { var vm = this; // 关键步骤:先初始化父对象,不能让它是undefined vm.test = {}; // 之后再给嵌套属性赋值Kendo Grid配置 vm.test.mainGridOptions = { dataSource: { type: "odata", transport: { read: "https://demos.telerik.com/kendo-ui/service/Northwind.svc/Orders" }, pageSize: 20, serverPaging: true, serverFiltering: true, serverSorting: true }, height: 550, pageable: true, columns: [ { field:"OrderID", filterable: false }, "ShipName", "ShipCity" ] }; });
对应HTML代码
<div ng-app="KendoDemos" ng-controller="MyCtrl as vm"> <div kendo-grid k-options="vm.test.mainGridOptions"></div> </div>
额外提示
如果你的网格配置是异步获取的(比如从后端接口加载),记得确保在赋值前vm.test已经被初始化,也可以用angular.copy()来替换直接赋值,这样能更明确地触发AngularJS的脏检查:
// 假设asyncConfig是异步获取到的配置对象 angular.copy(asyncConfig, vm.test.mainGridOptions);
这样修改后,你的Kendo Grid就能正常读取嵌套对象里的配置了!
内容的提问来源于stack exchange,提问作者RandomUser
相关产品推荐
相关产品推荐

