在 Angular 指令中包装 ag-grid
Wrap ag-grid in an Angular Directive
我正在创建向导以在我们的应用程序中添加新约会。向导的最后一页包含一个选项卡部分,其中包含基于多个标准的所有潜在冲突。每个选项卡都是标准之一,并使用 Angular 网格来显示冲突列表。由于每个网格都有相同的列,但包含不同的数据,我想使用一个指令将 Angular 网格及其网格选项包装在模板中,然后在我的指令的另一个属性中设置 rowData。我目前的指令如下:
'use strict';
app.directive('inApptConflict', ['angularGrid', function (angularGrid) {
return {
restrict: 'A',
transclude: true,
require: '?ngModel',
template: '<div class="ag-fresh conflictGrid" ag-grid="{{ conflictGridOptions }} ng-transclude"></div>',
controller: function ($scope) {
// function for displaying dates in grid
function datetimeCellRendererFunc(params) {...}
// column definitions
var conflictColumnDefs = [
{ colId: "Id", field: "Id", hide: true },
{ colId: "StartTime", field: "StartTime", headerName: "Start", width: 150, cellRenderer: datetimeCellRendererFunc } ...
];
// Grid options
$scope.conflictGridOptions = {
columnDefs: conflictColumnDefs,
rowData: null,
angularCompileRows: true,
enableColReseize: true
};
},
link: function ($scope, $elem, $attrs, ngModel) {
$scope.conflictGridOptions.rowData = ngModel;
$scope.conflictGridOptions.api.onNewRows();
}
};
}]);
我的视图有以下代码:
<!-- Tab panes -->
<div role="tabpanel" class="tab-pane fade in active" id="conflicts1" data-ng-show="apptCtrl.conflicts1">
<div in-appt-conflict data-ng-model="apptCtrl.conflicts1"></div>
</div>
<div role="tabpanel" class="tab-pane fade" id="conflicts2" data-ng-show="apptCtrl.conflicts2">
<div in-appt-conflict data-ng-model="apptCtrl.conflicts2"></div>
</div>
每当我 运行 这样做时,我都会遇到以下错误:
Error: [$injector:unpr] Unknown provider: angularGridProvider <- angularGrid <- inApptConflictDirective
我不确定我还需要做什么才能让指令识别 ag-grid。我也尝试过使用 $compile,但最终出现了同样的错误。
是否需要添加其他内容才能从指令调用第三方模块?当我使用三个单独的网格选项三次单独使用网格时,这确实有效。
在此先感谢您的帮助!
不需要在您的指令中注入 'angularGrid'(并且没有这样的可注入元素)。
只要您在 angular 模块中注册所有已注册的指令,所有模板都可以使用它们。
您唯一需要做的就是将 'agGrid' 添加到 angular 模块的依赖项中,例如
var module = angular.module("example", ["agGrid"]);
那么您可以在模板和指令中使用 ag-grid。
有关详细信息,请参阅 ag-grid documentation。
因此,从第 app.directive('inApptConflict', ['angularGrid', function (angularGrid) {
行中删除 'angularGrid',您就可以开始了。
我正在创建向导以在我们的应用程序中添加新约会。向导的最后一页包含一个选项卡部分,其中包含基于多个标准的所有潜在冲突。每个选项卡都是标准之一,并使用 Angular 网格来显示冲突列表。由于每个网格都有相同的列,但包含不同的数据,我想使用一个指令将 Angular 网格及其网格选项包装在模板中,然后在我的指令的另一个属性中设置 rowData。我目前的指令如下:
'use strict';
app.directive('inApptConflict', ['angularGrid', function (angularGrid) {
return {
restrict: 'A',
transclude: true,
require: '?ngModel',
template: '<div class="ag-fresh conflictGrid" ag-grid="{{ conflictGridOptions }} ng-transclude"></div>',
controller: function ($scope) {
// function for displaying dates in grid
function datetimeCellRendererFunc(params) {...}
// column definitions
var conflictColumnDefs = [
{ colId: "Id", field: "Id", hide: true },
{ colId: "StartTime", field: "StartTime", headerName: "Start", width: 150, cellRenderer: datetimeCellRendererFunc } ...
];
// Grid options
$scope.conflictGridOptions = {
columnDefs: conflictColumnDefs,
rowData: null,
angularCompileRows: true,
enableColReseize: true
};
},
link: function ($scope, $elem, $attrs, ngModel) {
$scope.conflictGridOptions.rowData = ngModel;
$scope.conflictGridOptions.api.onNewRows();
}
};
}]);
我的视图有以下代码:
<!-- Tab panes -->
<div role="tabpanel" class="tab-pane fade in active" id="conflicts1" data-ng-show="apptCtrl.conflicts1">
<div in-appt-conflict data-ng-model="apptCtrl.conflicts1"></div>
</div>
<div role="tabpanel" class="tab-pane fade" id="conflicts2" data-ng-show="apptCtrl.conflicts2">
<div in-appt-conflict data-ng-model="apptCtrl.conflicts2"></div>
</div>
每当我 运行 这样做时,我都会遇到以下错误:
Error: [$injector:unpr] Unknown provider: angularGridProvider <- angularGrid <- inApptConflictDirective
我不确定我还需要做什么才能让指令识别 ag-grid。我也尝试过使用 $compile,但最终出现了同样的错误。
是否需要添加其他内容才能从指令调用第三方模块?当我使用三个单独的网格选项三次单独使用网格时,这确实有效。
在此先感谢您的帮助!
不需要在您的指令中注入 'angularGrid'(并且没有这样的可注入元素)。 只要您在 angular 模块中注册所有已注册的指令,所有模板都可以使用它们。
您唯一需要做的就是将 'agGrid' 添加到 angular 模块的依赖项中,例如
var module = angular.module("example", ["agGrid"]);
那么您可以在模板和指令中使用 ag-grid。
有关详细信息,请参阅 ag-grid documentation。
因此,从第 app.directive('inApptConflict', ['angularGrid', function (angularGrid) {
行中删除 'angularGrid',您就可以开始了。