我目前正在使用 Kendo-UI 和 AngularJS。我试图让树列表根据它收到的 dateItem.[column_name] 数组将按钮呈现到列中。我无法生成其中包含绑定 ng-click 指令的按钮。
目前我正在尝试执行以下操作:
- 预定义角度控制器中的列
- 根据接收到的 VIA REST 服务的数组将自定义列推送到现有列中。
- 为每一列设置自定义模板
- 根据包含 ng-click 指令的 dataItem.[custom_column] 数组在自定义模板中创建按钮。
我很难掌握语法和与角度的绑定。最终结果应该有一个按钮,用于自定义列中的每个数组项,包含一个 ng-click。
我已经尝试过的:
angular.forEach(array, function(value, key) {
var buttonArray = "dataItem."+value["column_name"];
columns.push({field: value["column_name"], template: "<span>#alert('"+buttonArray+"');#</span>"});
});
这只是使用 TEXT 'dataItem.firstColumn' 而不是对象或其他东西发出警报。我计划用 javascript 循环遍历数组并以这种方式创建包含 ng-click 的按钮(不确定这是否会起作用)。
angular.forEach(array, function(value, key) {
var buttonArray = "dataItem."+value["column_name"];
columns.push({field: value["column_name"], template: "<span ng-bind-html=\"templateFunction("+buttonArray+")\"></span>"});
});
$scope.templateFunction = function(items){
var template = "";
//loop through items and create template accordingly
angular.forEach(items, function(value, key) {
//NOTE: unable to use ng-click with ng-bind-html, as it does not render the html here with angular
//perhaps needs a custom directive to enable that. However if the template renders properly (with the help of a directive), then kendo-ui will duplicate the elements with each rendering.
template += "<button kendo-button ng-click=\" test('Clicked button #"+value+"'); \">"+value+"</button>";
});
var returntemplate = $sce.trustAsHtml(template);
//trust the template as html, so it renders properly as html
return returntemplate;
};
$scope.test = function(value){ alert(value); };
这以某种方式起作用,数组以正确的值循环通过。这里的问题是这些模板中的 ng-click 未编译并绑定到范围,因此它们可以工作......解决方法是创建一个自定义指令,该指令使用 $compile 服务编译 html,但后来我发现每次折叠/展开列时,kendo-ui 树列表都会复制所有列按钮。
因此,基本上我希望根据 dataItem.columnName 中的数组(并且 columnName 是通过外部 REST 资源获取)来创建带有 ng-click 到 kendo-ui 树列表列的按钮。