Ui-Grid with Ui-select inside a modal,当您尝试打开选项时下拉菜单消失
Ui-Grid with Ui-select inside a modal, the dropdown dissapear when you try to open the options
我正在尝试在 ui-grid 中使用 ui-select,我按照以下步骤操作:http://brianhann.com/ui-grid-and-dropdowns/#more-287 我没有遇到任何问题要做到这一点,我的意思是他使用了一个简单的数组而不是复杂的 JSON,但是没关系!!
我的问题是,当我尝试在模式中创建此 cenerio 时,当我单击以编辑下拉菜单时,下拉菜单正常显示,但是当我单击打开下拉菜单以 select 一个选项时,我的 ui-select消失了,大家能帮帮我吗?我做错了什么?
angular.module('app', ['ui.grid', 'ui.grid.edit', 'ui.select',
'ui.bootstrap'])
.controller('MainCtrl', MainCtrl)
.controller('ModalCtrl', ModalCtrl)
.directive('uiSelectWrap', uiSelectWrap);
MainCtrl.$inject = ['$scope', '$http', '$uibModal'];
function MainCtrl($scope, $http, $uibModal) {
$scope.openModal = function(){
var modalInstance = $uibModal.open({
templateUrl: './modal.html',
controller: 'ModalCtrl',
size:'lg'
});
}
}
uiSelectWrap.$inject = ['$document', 'uiGridEditConstants'];
function uiSelectWrap($document, uiGridEditConstants) {
return function link($scope, $elm, $attr) {
$document.on('click', docClick);
function docClick(evt) {
if ($(evt.target).closest('.ui-select-container').size() === 0) {
$scope.$emit(uiGridEditConstants.events.END_CELL_EDIT);
$document.off('click', docClick);
}
}
};
}
ModalCtrl.$inject = ['$scope', '$http'];
function ModalCtrl($scope, $http){
$scope.gridOptions = {
rowHeight: 38,
columnDefs: [
{ name: 'name' },
{ name: 'age', type: 'number' },
{
displayName:'Gender',
width:'150',
field:'gender.option',
editModelField: 'gender',
editDropdownValueLabel: 'option',
editableCellTemplate: 'uiSelect',
editDropdownOptionsArray: [
{id:1, option:'male'},
{id:2, option:'female'},
{id:3, option:'other'},
]
}
]
};
$http.get('https://cdn.rawgit.com/angular-ui/ui-
grid.info/v3.0.7/data/500_complex.json')
.success(function(data) {
$scope.gridOptions.data = data;
});
}
我的笨蛋:Plunker
我只使用 style="z-index:9999;" 解决了这个问题,我注意到下拉菜单在那里但在模态后面,所以使用 z-index 解决了这个问题。
请参阅 adharris 在 Github 上的回答:https://github.com/angular-ui/ui-select/issues/201
简而言之,您将在 link($scope,$elm,$attrs) 函数中添加以下代码段:
var uiSelectController = $elm.children().controller('uiSelect');
uiSelectController.activate();
[更新] 只是想澄清一下,上面的结果实际上并没有 运行 预期的那样。在我的例子中,我必须删除 ui-select-wrapper
标签 - 并更改函数如下:
return function link($scope, $elm, $attr) {
$elm.controller('uiSelect').activate();
$document.on('click', docClick);
我正在尝试在 ui-grid 中使用 ui-select,我按照以下步骤操作:http://brianhann.com/ui-grid-and-dropdowns/#more-287 我没有遇到任何问题要做到这一点,我的意思是他使用了一个简单的数组而不是复杂的 JSON,但是没关系!!
我的问题是,当我尝试在模式中创建此 cenerio 时,当我单击以编辑下拉菜单时,下拉菜单正常显示,但是当我单击打开下拉菜单以 select 一个选项时,我的 ui-select消失了,大家能帮帮我吗?我做错了什么?
angular.module('app', ['ui.grid', 'ui.grid.edit', 'ui.select',
'ui.bootstrap'])
.controller('MainCtrl', MainCtrl)
.controller('ModalCtrl', ModalCtrl)
.directive('uiSelectWrap', uiSelectWrap);
MainCtrl.$inject = ['$scope', '$http', '$uibModal'];
function MainCtrl($scope, $http, $uibModal) {
$scope.openModal = function(){
var modalInstance = $uibModal.open({
templateUrl: './modal.html',
controller: 'ModalCtrl',
size:'lg'
});
}
}
uiSelectWrap.$inject = ['$document', 'uiGridEditConstants'];
function uiSelectWrap($document, uiGridEditConstants) {
return function link($scope, $elm, $attr) {
$document.on('click', docClick);
function docClick(evt) {
if ($(evt.target).closest('.ui-select-container').size() === 0) {
$scope.$emit(uiGridEditConstants.events.END_CELL_EDIT);
$document.off('click', docClick);
}
}
};
}
ModalCtrl.$inject = ['$scope', '$http'];
function ModalCtrl($scope, $http){
$scope.gridOptions = {
rowHeight: 38,
columnDefs: [
{ name: 'name' },
{ name: 'age', type: 'number' },
{
displayName:'Gender',
width:'150',
field:'gender.option',
editModelField: 'gender',
editDropdownValueLabel: 'option',
editableCellTemplate: 'uiSelect',
editDropdownOptionsArray: [
{id:1, option:'male'},
{id:2, option:'female'},
{id:3, option:'other'},
]
}
]
};
$http.get('https://cdn.rawgit.com/angular-ui/ui-
grid.info/v3.0.7/data/500_complex.json')
.success(function(data) {
$scope.gridOptions.data = data;
});
}
我的笨蛋:Plunker
我只使用 style="z-index:9999;" 解决了这个问题,我注意到下拉菜单在那里但在模态后面,所以使用 z-index 解决了这个问题。
请参阅 adharris 在 Github 上的回答:https://github.com/angular-ui/ui-select/issues/201
简而言之,您将在 link($scope,$elm,$attrs) 函数中添加以下代码段:
var uiSelectController = $elm.children().controller('uiSelect');
uiSelectController.activate();
[更新] 只是想澄清一下,上面的结果实际上并没有 运行 预期的那样。在我的例子中,我必须删除 ui-select-wrapper
标签 - 并更改函数如下:
return function link($scope, $elm, $attr) {
$elm.controller('uiSelect').activate();
$document.on('click', docClick);