指令的 angularjs 打字稿控制器 class 中未定义的范围变量
Scope Variable undefined in angularjs typescript controller class of directive
我已经在 ag 网格上创建了 wrapper 指令,如下所示
function MyDirective(): ng.IDirective {
var directive = <ng.IDirective>{
restrict: "E",
template: '<div style="width: 100%; height: 400px;" ag-grid="vm.agGridOptions" class="ag-fresh ag-basic"></div>',
scope: { gridOptions: '=', rowClicked: "&", api: '=' },
controller: gridController,
controllerAs: 'vm',
bindToController: true
}
return directive;
}
angular.module("angularWithTS").directive("myDirective", MyDirective);
我的控制器 class 如下所示:
export class gridController {
public agGridOptions: any = {};
public api: any = {};
public gridOptions: any;
public rowClicked: any;
constructor() {
this.Process();
}
private Process() {
/*****Contoller Logic*****/
var columnDefs = commonFunctions.convertToAgColumns(this.gridOptions.columnDefinitions);
this.agGridOptions.enableSorting = true;
this.agGridOptions.editable = true;
this.agGridOptions.enableColResize = true;
this.agGridOptions.columnDefs = columnDefs;
/*****Contoller Logic*****/
/*****Exposed Events*****/
this.agGridOptions.onRowClicked = function (event) {
this.rowClicked({ index: event.rowIndex });
};
/*****Exposed Events*****/
/*****Public Api*****/
this.api = {
populateData: function (options) {
this.agGridOptions.api.setRowData(options.rowData);
}
}
}
/*****Public Api*****/
}
我在 html 中的指令标记如下所示
<my-directive grid-options="options" api="gridApi"></my-directive>
问题:当我尝试在控制器范围变量(如 agGridOptions 未定义)中调用 api 方法 populateData() 时,rest 无法正常工作。
为什么当我调用 public api 时变量 agGridOptions 不可用?
请帮助.. 当我编写正常的 js 函数方式控制器但不使用打字稿 class 控制器时,它工作正常。任何帮助将不胜感激
我正在像下面这样调用控制器方法:
$scope.gridApi = {};
$scope.options = {};
$scope.options.columnDefinitions = $scope.columnDefinitions;
$http.get("monthlySales.json").then(function (response) {
$timeout(function () {
$scope.options.rowData = response.data;
$scope.gridApi.populateData($scope.options);
},2000);
});
当控制器第一次调用时,控制器中的所有变量值(如gridOptions、agGridOptions)都被正确获取。
但是当我调用 api populateData 显示获取的数据时,agGridOptions 变得不确定。
您在函数中调用的 'this' 指的是函数本身,而不是您的控制器-
this.api = {
populateData: function (options) {
this.agGridOptions.api.setRowData(options.rowData); //(this = populateData function)
}
}
语法应该改为 () =>(这会使 typescript 编译器变成 'transfer' this,它会在 js 文件中变成 _this)
它应该是这样的:
this.api.populateData = (options)=> {
this.agGridOptions.api.setRowData(options.rowData);
}
我已经在 ag 网格上创建了 wrapper 指令,如下所示
function MyDirective(): ng.IDirective {
var directive = <ng.IDirective>{
restrict: "E",
template: '<div style="width: 100%; height: 400px;" ag-grid="vm.agGridOptions" class="ag-fresh ag-basic"></div>',
scope: { gridOptions: '=', rowClicked: "&", api: '=' },
controller: gridController,
controllerAs: 'vm',
bindToController: true
}
return directive;
}
angular.module("angularWithTS").directive("myDirective", MyDirective);
我的控制器 class 如下所示:
export class gridController {
public agGridOptions: any = {};
public api: any = {};
public gridOptions: any;
public rowClicked: any;
constructor() {
this.Process();
}
private Process() {
/*****Contoller Logic*****/
var columnDefs = commonFunctions.convertToAgColumns(this.gridOptions.columnDefinitions);
this.agGridOptions.enableSorting = true;
this.agGridOptions.editable = true;
this.agGridOptions.enableColResize = true;
this.agGridOptions.columnDefs = columnDefs;
/*****Contoller Logic*****/
/*****Exposed Events*****/
this.agGridOptions.onRowClicked = function (event) {
this.rowClicked({ index: event.rowIndex });
};
/*****Exposed Events*****/
/*****Public Api*****/
this.api = {
populateData: function (options) {
this.agGridOptions.api.setRowData(options.rowData);
}
}
}
/*****Public Api*****/
}
我在 html 中的指令标记如下所示
<my-directive grid-options="options" api="gridApi"></my-directive>
问题:当我尝试在控制器范围变量(如 agGridOptions 未定义)中调用 api 方法 populateData() 时,rest 无法正常工作。 为什么当我调用 public api 时变量 agGridOptions 不可用? 请帮助.. 当我编写正常的 js 函数方式控制器但不使用打字稿 class 控制器时,它工作正常。任何帮助将不胜感激
我正在像下面这样调用控制器方法:
$scope.gridApi = {};
$scope.options = {};
$scope.options.columnDefinitions = $scope.columnDefinitions;
$http.get("monthlySales.json").then(function (response) {
$timeout(function () {
$scope.options.rowData = response.data;
$scope.gridApi.populateData($scope.options);
},2000);
});
当控制器第一次调用时,控制器中的所有变量值(如gridOptions、agGridOptions)都被正确获取。 但是当我调用 api populateData 显示获取的数据时,agGridOptions 变得不确定。
您在函数中调用的 'this' 指的是函数本身,而不是您的控制器-
this.api = {
populateData: function (options) {
this.agGridOptions.api.setRowData(options.rowData); //(this = populateData function)
}
}
语法应该改为 () =>(这会使 typescript 编译器变成 'transfer' this,它会在 js 文件中变成 _this)
它应该是这样的:
this.api.populateData = (options)=> {
this.agGridOptions.api.setRowData(options.rowData);
}