[英]Angular-Material : md-select in md-dialog not closing
我創建了一個簡單的指令,它包含在一個帶有幾個 md-input 和一個md-select
的表單中。
我現在在幾頁中使用了我的指令,一切正常,但現在我想在md-dialog
使用它,但它沒有按預期工作,如果我點擊,我無法關閉 md-select-menu在它之外,即使我專注於 md 輸入。
因此,用戶關閉菜單的唯一兩種方法是選擇一個選項或關閉對話框。
這還不錯,但我發現這很煩人。
這是對話框的內容:
<md-dialog aria-label="Modal" ng-cloak flex="75">
<md-toolbar ng-class="md-primary">
<div class="md-toolbar-tools">
<h2 translate>personModal.update</h2>
<span flex></span>
<md-button class="md-icon-button" ng-click="cancel()">
<md-icon md-svg-src="img/ic_close_white.svg" aria-label="Close dialog"></md-icon>
</md-button>
</div>
</md-toolbar>
<person-form person="person"></person-form>
</md-dialog>
和指令內容:
<form name="createPersonForm" layout="row" layout-align="space-between center" class="bg-sec query-fields">
<md-input-container flex class="full-width-input">
<label translate>createPerson.form.firstname</label>
<input name="firstname" ng-model="person.firstname" required md-asterisk/>
<div ng-messages="createPersonForm.firstname.$error"
ng-show="createPersonForm.firstname.$touched">
<div ng-message="required" translate>
createPersonForm.errors.firstnameMissing
</div>
</div>
</md-input-container>
<!-- -->
<!-- Other md-inputs here -->
<!-- -->
<md-input-container flex class="consumption-filter full-width-input">
<label translate>createPerson.form.contact</label>
<md-select name="contact" ng-model="person.contactId" required>
<md-option ng-repeat="contact in contacts" ng-value="{{contact.id}}">
<span>{{contact.name}}</span>
</md-option>
</md-select>
<div class="md-errors-spacer"></div>
<div ng-messages="createPersonForm.contact.$error"
ng-show="createPersonForm.contact.$touched">
<div ng-message="required" translate>
createPersonForm.errors.contactMissing
</div>
</div>
</md-input-container>
<md-button class="md-raised bg-white" ng-click="createPerson()" ng-disabled="createPersonForm.$invalid" ng-hide="loading" ><span translate>createPersonForm.errors.createButton</span></md-button>
<md-progress-circular md-mode="indeterminate" class="md-accent" ng-show="loading"></md-progress-circular>
</form>
我正在使用 Angular 1.5 和 Angular Material 1.0 。
我嘗試玩弄 z-index,並升級 angular/angular 材料,但這並沒有解決問題。
我正在考慮在 md-select 失去焦點時以編程方式關閉菜單,但我發現這有點難看。 我還不知道該怎么做。
提前致謝 !
使用上面 Freego 提出的方法在 angular-material 1.1.5 上給我拋出了一個錯誤
TypeError: Cannot read property '$viewValue' of undefined
我在 angular-material 1.1.5 中通過為<md-backdrop />
和.md-select-menu-container
設置 z-index 來解決這個問題。
.md-select-menu-container {
z-index: 900;
}
md-backdrop.md-select-backdrop {
z-index: 899;
}
對於那些對此感興趣的人,這是我為解決問題所做的工作。 我知道這不是最優雅的解決方案,但它對我有用。 如果有人有更好的想法,請隨時與我們分享!
HTML :
<md-input-container flex>
<label>Category</label>
<md-select ng-model="selectedCategory" md-on-open="dirtyFix()">
<md-option ng-repeat="cat in categories" ng-value="{{cat}}" ng-selected="$first">{{cat.name}}
</md-option>
</md-select>
</md-input-container>
JS:
$scope.dirtyFix= function () {
$timeout(function () {
$(".md-scroll-mask").css("z-index", 899);
$(".md-scroll-mask").click(function () {
$(".md-select-menu-container").remove();
$(".md-scroll-mask").css("z-index", -1);
});
}, 500);
}
CSS :
.md-select-menu-container {
z-index: 900;
}
必須設置超時才能讓模態渲染,然后使用 z-index 和 clicklistener。
它遠非完美,但也許它會激勵你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.