gpt4 book ai didi

angularjs - Angular ui-grid 双击行打开弹出窗口以编辑行

转载 作者:行者123 更新时间:2023-12-03 06:35:19 32 4
gpt4 key购买 nike

版本:

我正在使用 Angular ui-grid 版本 3.0.0-RC.18 ( http://ui-grid.info/ )。

问题

我想在 ui-grid 表中实现双击事件。特别是,我想在双击一行时打开一个模式弹出窗口。

我尝试在 rowTemplate 定义中使用 ng-dblclick 指令,如 https://github.com/angular-ui/ng-grid/issues/2228 中的建议。 ,但“dblclick”事件永远不会被触发。

尽管如此,我找到了一个解决方案,但是使用了我自己创建的指令。我可以在不创建指令的情况下做得更好吗?

如有任何评论,我们将不胜感激。

代码:

我在 Controller 上的代码如下:

$scope.onDblClick = function(row) {
var url = '//google.com';
$window.open(url, "_blank", "height=600,width=800,toolbar=no,location=no,menubar=no,titlebar=no");
}

// Define the New Conflicts Simulation GRID behavior
$scope.myGridOptions = {
showFooter: false,
enableSorting: true,
multiSelect: false,
enableFiltering: true,
enableRowSelection: true,
enableSelectAll: false,
enableRowHeaderSelection: false,
enableGridMenu: true,
noUnselect: true,
onRegisterApi: function (gridApi){
$scope.gridApi = gridApi;
},
rowTemplate: "<div ng-dblclick=\"onDblClick(row)\" ng-repeat=\"(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name\" class=\"ui-grid-cell\" ng-class=\"{ 'ui-grid-row-header-cell': col.isRowHeader }\" ui-grid-cell dbl-click-row></div>"

}

(其中 dbl-click-row 表示我正在使用 dblClickRow 指令)

我在 View 中的代码如下:

<div id="myGrid" ui-grid="myGridOptions" ui-grid-selection ui-grid-resize-columns class="gridTable" ></div>

我在指令中的代码如下:

var angularStartDirectives = angular.module('angularStart.directives', []);     

angularStartDirectives.directive('dblClickRow', ['$compile', '$parse', function($compile, $parse) {
return {
priority : -190, // run after default uiGridCell directive
restrict : 'A',
scope : false,

compile: function($element, attr) {

// Get the function at ng-dblclick for ui-grid
var fn = $parse(attr['ngDblclick'], /* interceptorFn */ null, /* expensiveChecks */ true);

return function ngEventHandler(scope, element) {

element.on('dblclick', function(event) {

var callback = function() {

if ($scope.gridApi.grid.selection.lastSelectedRow)
{
fn($scope, {$event:event, row: $scope.gridApi.grid.selection.lastSelectedRow.entity });
}
};

$scope.$apply(callback);

}
)};

}

};
} ]);

最佳答案

嗯,我的问题在 Github 上得到了解答:

https://github.com/angular-ui/ng-grid/issues/2228#issuecomment-71912850

我的错误是没有使用外部作用域,并尝试仅使用 ng-dblclick 来解决问题。

代码应该是这样的:

在 Controller 处:

$scope.gridHandlers = { 

onDblClick : function(row) {
var url = '//google.com';
$window.open(url, "_blank", "height=600,width=800,toolbar=no,location=no,menubar=no,titlebar=no");
}
}

$scope.myGridOptions = {
showFooter: false,
enableSorting: true,
multiSelect: false,
enableFiltering: true,
enableRowSelection: true,
enableSelectAll: false,
enableRowHeaderSelection: false,
enableGridMenu: true,
noUnselect: true,
onRegisterApi: function (gridApi){
$scope.gridApi = gridApi;
},
rowTemplate: "<div ng-dblclick=\"getExternalScopes().onDblClick(row)\" ng-repeat=\"(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name\" class=\"ui-grid-cell\" ng-class=\"{ 'ui-grid-row-header-cell': col.isRowHeader }\" ui-grid-cell ></div>"

}

在 View 中:

<div id="myGrid" ui-grid="myGridOptions" ui-grid-selection ui-grid-resize-columns class="gridTable" external-scopes="gridHandlers"></div>

ui-grid v3.0.0-rc.21 更新:

考虑到不再支持externalScopes,现在采用appScopeProvider规则。

在 View 中:

<div id="myGrid" ui-grid="myGridOptions" ui-grid-selection ui-grid-resize-columns class="gridTable" ></div>

在 Controller 中:

$scope.myGridOptions = {
showFooter: false,
enableSorting: true,
multiSelect: false,
enableFiltering: true,
enableRowSelection: true,
enableSelectAll: false,
enableRowHeaderSelection: false,
enableGridMenu: true,
noUnselect: true,
onRegisterApi: function (gridApi){
$scope.gridApi = gridApi;
},
appScopeProvider: {
onDblClick : function(row) {
var url = '//google.com';
$window.open(url, "_blank", "height=600,width=800,toolbar=no,location=no,menubar=no,titlebar=no");
}
},
rowTemplate: "<div ng-dblclick=\"grid.appScope.onDblClick(row)\" ng-repeat=\"(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name\" class=\"ui-grid-cell\" ng-class=\"{ 'ui-grid-row-header-cell': col.isRowHeader }\" ui-grid-cell ></div>"
}

这是我在 Plnkr 上使用模态弹出窗口的示例(使用 angular-ui-bootstrap 完成):

http://plnkr.co/edit/cq7s9lKn90xTVgNxIC6b?p=preview

请注意,如果您使用较新版本的 ui-bootstrap,则需要将上述 plunkr 中的 $modal 重命名为 $uibModal。

关于angularjs - Angular ui-grid 双击行打开弹出窗口以编辑行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28201723/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com