AngularJs:为此我需要在我的控制器中使用 $scope 吗?
AngualrJs: do I require $scope in my controller for this?
我正在尝试模仿 this Plunker,特别是在 ag-grid 的每一行添加一个按钮。
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-grid 调用 ageCellRendererFunc
渲染单元格。它正在生成一些 HTML 来生成一个按钮,单击该按钮将导致调用 ageClicked
。
那个params.$scope.ageClicked = ageClicked;
好像是在赋值一个$scope
变量,在按钮代码中用到:'<button ng-click="ageClicked(data.age)">Age</button>'
.
我不确定为什么有必要分配一个 $scope
变量,以及为什么我们不能只引用一个 $scope
函数。可以吗?
更重要的是,我没有将 $scope
注入我的控制器,因为我在视图中使用了 constroller as
语法。
如何使用 controller as
语法,将 HTML 按钮添加到 ag-grid
单元格,让一段类似的代码正常工作?
[更新] 上面引用的 Plunker 使用了非常旧的 ag-grid 版本。
- 我想使用最新版本,v22
- 我不想使用
$scope
或 $rootscope
,只是 this
和 controller as
语法
- 每一行应包含一个单元格,该单元格显示一个按钮,单击该按钮时,将以 soem 行数据作为参数执行一个函数(就像 Plunker 中的 "age",但满足此列表中的 1 和 2 )
ag-grid
里面是一个$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;
/* ... */
}
编辑 1
这是一个使用 ag-grid 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-grid的定义。开发人员可以使用另一个变量 - bob
,语法为 params.bob.ageClicked = ageClicked;
我正在尝试模仿 this Plunker,特别是在 ag-grid 的每一行添加一个按钮。
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-grid 调用 ageCellRendererFunc
渲染单元格。它正在生成一些 HTML 来生成一个按钮,单击该按钮将导致调用 ageClicked
。
那个params.$scope.ageClicked = ageClicked;
好像是在赋值一个$scope
变量,在按钮代码中用到:'<button ng-click="ageClicked(data.age)">Age</button>'
.
我不确定为什么有必要分配一个 $scope
变量,以及为什么我们不能只引用一个 $scope
函数。可以吗?
更重要的是,我没有将 $scope
注入我的控制器,因为我在视图中使用了 constroller as
语法。
如何使用 controller as
语法,将 HTML 按钮添加到 ag-grid
单元格,让一段类似的代码正常工作?
[更新] 上面引用的 Plunker 使用了非常旧的 ag-grid 版本。
- 我想使用最新版本,v22
- 我不想使用
$scope
或$rootscope
,只是this
和controller as
语法 - 每一行应包含一个单元格,该单元格显示一个按钮,单击该按钮时,将以 soem 行数据作为参数执行一个函数(就像 Plunker 中的 "age",但满足此列表中的 1 和 2 )
ag-grid
里面是一个$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;
/* ... */
}
编辑 1
这是一个使用 ag-grid 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-grid的定义。开发人员可以使用另一个变量 - bob
,语法为 params.bob.ageClicked = ageClicked;