ngMaterial - md-autocomplete - 结果列表显示在模态形式后面
ngMaterial - md-autocomplete - results list showing behind modal form
我有模态表单,我希望在我的模态表单中有自动完成字段。
为了实现这一点,我使用了 angular-material#1.1.0
中的 md-autocomplete
,它提供了这样的功能并且易于使用。
问题是当我在这个字段中写东西时,整个建议列表出现在我的模态 window 后面,但它应该出现在这个模态形式的顶部。
你知道如何解决这个问题吗?
我附上 html 表单源代码和相关的 angular 控制器。
movie-resource-dialog-controller.js
(function() {
'use strict';
angular
.module('vodApp')
.controller('MovieResourceDialogController', MovieResourceDialogController);
MovieResourceDialogController.$inject = ['$http', '$timeout', '$scope', '$stateParams', '$uibModalInstance', 'DataUtils', 'entity', 'MovieResource', 'Movie'];
function MovieResourceDialogController ($http, $timeout, $scope, $stateParams, $uibModalInstance, DataUtils, entity, MovieResource, Movie) {
var vm = this;
vm.movieResource = entity;
vm.clear = clear;
vm.byteSize = DataUtils.byteSize;
vm.openFile = DataUtils.openFile;
vm.save = save;
$timeout(function (){
angular.element('.form-group:eq(1)>input').focus();
});
function clear () {
$uibModalInstance.dismiss('cancel');
}
function save () {
vm.isSaving = true;
if (vm.movieResource.id !== null) {
MovieResource.update(vm.movieResource, onSaveSuccess, onSaveError);
} else {
MovieResource.save(vm.movieResource, onSaveSuccess, onSaveError);
}
}
function onSaveSuccess (result) {
$scope.$emit('vodApp:movieResourceUpdate', result);
$uibModalInstance.close(result);
vm.isSaving = false;
}
function onSaveError () {
vm.isSaving = false;
}
vm.setResource = function ($file, movieResource) {
if ($file && $file.$error === 'pattern') {
return;
}
if ($file) {
DataUtils.toBase64($file, function(base64Data) {
$scope.$apply(function() {
movieResource.resource = base64Data;
movieResource.resourceContentType = $file.type;
});
});
}
};
vm.querySearchMoviesLike = function (query) {
Movie.queryByTitle({
title: query
}, onSuccess, onError);
function onSuccess(data, headers) {
vm.proposedMovies = data;
}
function onError(error) {
AlertService.error(error.data.message);
}
return vm.proposedMovies;
}
}
})();
movie-resource-dialog.html
<div class="form-group">
<label class="control-label">Movie Title</label>
<md-autocomplete flex
md-selected-item="vm.selectedMovie"
md-search-text="vm.searchMovieTitle"
md-items="item in vm.querySearchMoviesLike(vm.searchMovieTitle)"
md-item-text="title"
md-delay="300">
<div layout="row" class="item" layout-align="start center">
<img data-ng-src="{{'data:' + item.posterContentType + ';base64,' + item.poster}}" style="width: 40px;" />
<span md-highlight-text="vm.searchMovieTitle">{{item.title}}</span>
</div>
</md-autocomplete>
</div>
截图(看起来像这样):
https://i.stack.imgur.com/P6Ln3.png
谢谢你,卢克
您需要覆盖模式 z-index
css 属性。将此 css 样式添加到您现有的样式表或页面 md-autocomplete-suggestions-container
.md-autocomplete-suggestions-container{
z-index:100000 !important; /* any number of choice > 1050*/
}
我遇到了几乎相同的问题,但在我的情况下我的列表是不可选择的,我的问题是因为当模式打开时它有一个一般的 "pointer-events: none" 所以我在下面添加 css在我的全局 css 上,它解决了我的问题。希望能帮到别人。
.md-autocomplete-suggestions-container{
pointer-events: all !important;
}
对于仍在寻找这个的人,我发现这个解决方法对我有用
/deep/ .cdk-overlay-container { z-index: 9999; }
我有模态表单,我希望在我的模态表单中有自动完成字段。
为了实现这一点,我使用了 angular-material#1.1.0
中的 md-autocomplete
,它提供了这样的功能并且易于使用。
问题是当我在这个字段中写东西时,整个建议列表出现在我的模态 window 后面,但它应该出现在这个模态形式的顶部。
你知道如何解决这个问题吗?
我附上 html 表单源代码和相关的 angular 控制器。
movie-resource-dialog-controller.js
(function() {
'use strict';
angular
.module('vodApp')
.controller('MovieResourceDialogController', MovieResourceDialogController);
MovieResourceDialogController.$inject = ['$http', '$timeout', '$scope', '$stateParams', '$uibModalInstance', 'DataUtils', 'entity', 'MovieResource', 'Movie'];
function MovieResourceDialogController ($http, $timeout, $scope, $stateParams, $uibModalInstance, DataUtils, entity, MovieResource, Movie) {
var vm = this;
vm.movieResource = entity;
vm.clear = clear;
vm.byteSize = DataUtils.byteSize;
vm.openFile = DataUtils.openFile;
vm.save = save;
$timeout(function (){
angular.element('.form-group:eq(1)>input').focus();
});
function clear () {
$uibModalInstance.dismiss('cancel');
}
function save () {
vm.isSaving = true;
if (vm.movieResource.id !== null) {
MovieResource.update(vm.movieResource, onSaveSuccess, onSaveError);
} else {
MovieResource.save(vm.movieResource, onSaveSuccess, onSaveError);
}
}
function onSaveSuccess (result) {
$scope.$emit('vodApp:movieResourceUpdate', result);
$uibModalInstance.close(result);
vm.isSaving = false;
}
function onSaveError () {
vm.isSaving = false;
}
vm.setResource = function ($file, movieResource) {
if ($file && $file.$error === 'pattern') {
return;
}
if ($file) {
DataUtils.toBase64($file, function(base64Data) {
$scope.$apply(function() {
movieResource.resource = base64Data;
movieResource.resourceContentType = $file.type;
});
});
}
};
vm.querySearchMoviesLike = function (query) {
Movie.queryByTitle({
title: query
}, onSuccess, onError);
function onSuccess(data, headers) {
vm.proposedMovies = data;
}
function onError(error) {
AlertService.error(error.data.message);
}
return vm.proposedMovies;
}
}
})();
movie-resource-dialog.html
<div class="form-group">
<label class="control-label">Movie Title</label>
<md-autocomplete flex
md-selected-item="vm.selectedMovie"
md-search-text="vm.searchMovieTitle"
md-items="item in vm.querySearchMoviesLike(vm.searchMovieTitle)"
md-item-text="title"
md-delay="300">
<div layout="row" class="item" layout-align="start center">
<img data-ng-src="{{'data:' + item.posterContentType + ';base64,' + item.poster}}" style="width: 40px;" />
<span md-highlight-text="vm.searchMovieTitle">{{item.title}}</span>
</div>
</md-autocomplete>
</div>
截图(看起来像这样): https://i.stack.imgur.com/P6Ln3.png
谢谢你,卢克
您需要覆盖模式 z-index
css 属性。将此 css 样式添加到您现有的样式表或页面 md-autocomplete-suggestions-container
.md-autocomplete-suggestions-container{
z-index:100000 !important; /* any number of choice > 1050*/
}
我遇到了几乎相同的问题,但在我的情况下我的列表是不可选择的,我的问题是因为当模式打开时它有一个一般的 "pointer-events: none" 所以我在下面添加 css在我的全局 css 上,它解决了我的问题。希望能帮到别人。
.md-autocomplete-suggestions-container{
pointer-events: all !important;
}
对于仍在寻找这个的人,我发现这个解决方法对我有用
/deep/ .cdk-overlay-container { z-index: 9999; }