AnguarJs:我需要在我的控制器中设置$scope吗



我正试图模仿这个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 assytax将HTML按钮添加到ag-grid单元格中,使类似的代码正常工作?


[Update]上面提到的Plunker使用了一个非常旧的ag网格版本。

  1. 我想使用最新版本v22
  2. 我不想使用$scope$rootscope,只是使用thiscontroller as语法
  3. 每一行都应该包含一个单元格,该单元格显示一个按钮,当单击该按钮时,该按钮将执行一个以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>';
}

正如您所提到的,$scopeparams有关,而不是您的控制器。您的控制器根本不使用$scope。这是ag网格的定义。开发人员可以使用另一个变量bob,语法为params.bob.ageClicked = ageClicked;

最新更新