我正试图模仿这个Plunker,特别是在ag网格的每一行添加一个按钮。
function ageClicked(age) {
window.alert("Age clicked: " + age);
}
function ageCellRendererFunc(params) {
params.$scope.ageClicked = ageClicked;
return '<button ng-click="ageClicked(data.age)">Age</button>';
}
Ag网格调用ageCellRendererFunc
来渲染单元。它正在生成一些HTML来呈现一个按钮,当单击该按钮时,将调用ageClicked
。
params.$scope.ageClicked = ageClicked;
似乎正在分配一个$scope
变量,该变量用于按钮代码:'<button ng-click="ageClicked(data.age)">Age</button>'
。
我不确定为什么需要分配$scope
变量,以及为什么我们不能只引用$scope
函数。能做到吗?
更重要的是,我没有将$scope
注入到我的控制器中,因为我在视图中使用了constroller as
语法。
如何使用controller as
sytax将HTML按钮添加到ag-grid
单元格中,使类似的代码正常工作?
[Update]上面提到的Plunker使用了一个非常旧的ag网格版本。
- 我想使用最新版本v22
- 我不想使用
$scope
或$rootscope
,只是使用this
和controller as
语法 - 每一行都应该包含一个单元格,该单元格显示一个按钮,当单击该按钮时,该按钮将执行一个以soem行数据为参数的函数(就像Plunker中的"年龄"一样,但满足该列表中的1&2(
它是ag-grid
(plunker(中的$scope
在调用ageCellRendererFunc
之前
function ageCellRendererFunc(params) {
params.$scope.ageClicked = ageClicked;
eturn '<button ng-click="ageClicked(data.age)">Age</button>';
}
它初始化params
(4012(:
RenderedCell.prototype.createParams = function () {
var params = {
node: this.node,
data: this.node.data,
value: this.value,
rowIndex: this.rowIndex,
colDef: this.column.colDef,
$scope: this.scope, // <----
context: this.gridOptionsWrapper.getContext(),
api: this.gridOptionsWrapper.getApi()
};
return params;
};
所以你可以使用controller as
module.controller("exampleCtrl", function($http) {
var vm = self;
/* ... */
}
带vm 的柱塞
编辑1
这是一个使用ag网格22.0.0 的plunker
(增加agGrid.initialiseAgGridWithAngular1(angular)
(
这个代码很好:
function ageCellRendererFunc(params) {
params.$scope.ageClicked = ageClicked;
return '<button ng-click="ageClicked(data.age)">Age</button>';
}
正如您所提到的,$scope
与params
有关,而不是您的控制器。您的控制器根本不使用$scope
。这是ag网格的定义。开发人员可以使用另一个变量bob
,语法为params.bob.ageClicked = ageClicked;