- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
它不是作为停留弹出窗口打开,而是作为页面底部左对齐的 block 打开。
我搜索了类似的问题,找到了这个angular2 MdDialog is not appearing as a popup但也不起作用。
制作了一个干净的页面,也许是我的其他一些 css 干扰了,但没有。
<div>
<h4 mat-dialog-title>New consultant</h4>
</div>
<mat-dialog-content>
<div *ngIf="!allFieldsAreFilledIn()" class="alert alert-info">
<strong>{{ getAddFeedback('emptyFields') }}</strong>
</div>
<div ngbDropdown class="d-inline-block">
<button class="btn btn-outline-primary" id="dropdownBasic1" ngbDropdownToggle>{{ currentNewConsultant.user ? currentNewConsultant.user.lastName + " " + currentNewConsultant.user.firstName : activeUsers[0].lastName
+ " " + activeUsers[0].firstName }}</button>
<div ngbDropdownMenu aria-labelledby="dropdownBasic1">
<button class="dropdown-item" *ngFor="let user of activeUsers" (click)="updateNewConsultantProperty(user, 'user')">{{user.lastName + " " + user.firstName}}</button>
</div>
</div>
<div ngbDropdown class="d-inline-block">
<button class="btn btn-outline-primary" id="dropdownBasic1" ngbDropdownToggle>{{ currentNewConsultant.unitManager != null ? currentNewConsultant.unitManager.lastName + " " + currentNewConsultant.unitManager.firstName
: unitManagers[0].lastName + " " + unitManagers[0].firstName }}</button>
<div ngbDropdownMenu aria-labelledby="dropdownBasic1">
<button class="dropdown-item" *ngFor="let um of unitManagers" (click)="updateNewConsultantProperty(um, 'unitManager')">{{um.lastName + " " + um.firstName}}</button>
</div>
</div>
<div ngbDropdown class="d-inline-block">
<button class="btn btn-outline-primary" id="dropdownBasic1" ngbDropdownToggle> {{ currentNewConsultant.profile ? currentNewConsultant.profile.name : userRoles[0].name}}</button>
<div ngbDropdownMenu aria-labelledby="dropdownBasic1">
<button class="dropdown-item" *ngFor="let profile of userRoles" (click)="updateNewConsultantProperty(profile, 'profile')">{{profile.name}}</button>
</div>
</div>
<!-- Selecting Internal -->
<div class="crudElement">
<label class="crudLabel" style="padding-top: 7px;">Internal?:</label>
<div class="btn-group crudEditElement" dropdown>
<button type="button" class="btn green-button dropdown-margin-min-width" dropdownToggle>
{{ currentNewConsultant.internal ? 'Internal' : 'External' }}
<span class="caret"></span>
</button>
<ul *dropdownMenu role="menu" aria-labelledby="single-button" class="dropdownItems dropdown-menu dropdown-margin-min-width">
<li role="menuitem" (click)="updateNewConsultantProperty('Internal', 'internal')">
<a class="dropdown-item">Internal</a>
</li>
<li role="menuitem" (click)="updateNewConsultantProperty('External', 'internal')">
<a class="dropdown-item">External</a>
</li>
</ul>
</div>
</div>
<div class="form-group">
<label for="hometown">Hometown:</label>
<input type="text" class="form-control" name="hometown" [(ngModel)]="currentNewConsultant.hometown" required>
</div>
<div class="form-group">
<label for="skills">Skills:</label>
<input type="text" class="form-control" name="skills" [(ngModel)]="currentNewConsultant.skills" required>
</div>
<div class="form-group">
<label for="comment">Comment:</label>
<textarea class="form-control" name="comment" [(ngModel)]="currentNewConsultant.comment" required></textarea>
</div>
<div class="form-group">
<label for="individualCost">Individual Cost:</label>
<input type="number" class="form-control" name="individualCost" step="0.5" [(ngModel)]="currentNewConsultant.individualCost"
required>
</div>
<!--ADDING / SAVING-->
<div *ngIf="activeUsers && allFieldsAreFilledIn()">
<button [ngStyle]="{'display' : (addConfirming ? 'none' : '')}" type="button" class="btn btn-success" (click)="save()">Add
</button>
<div [ngStyle]="{'display' : (addConfirming ? '' : 'none')}">
<div>
Are you certain you want to add the new Consultant {{ currentNewConsultant.user.lastName + ' ' + currentNewConsultant.user.firstName
}}?
</div>
<button style="margin-right: 5px; margin-top: 10px;" type="submit" class="btn btn-danger " (click)="cancel()">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
</button>
<button style="margin-top: 10px;" type="button" class="btn btn-success" (click)="save()">
<span class="glyphicon glyphicon-check" aria-hidden="true"></span>
</button>
</div>
</div>
<div *ngIf="!activeUsers" class="alert alert-danger text-center" style="margin-top: 20px;">
<strong>{{ getAddFeedback() }}</strong>
</div>
</mat-dialog-content>
样式.scss
@import '~@angular/material/prebuilt-themes/purple-green.css';
打开对话框
private openDialog(): void {
let dialogRef = this.dialog.open(CreateConsultantModalComponent, {
});
}
对话框组件
import { Component, OnInit, Output } from '@angular/core';
import { ConsultantService } from '../../../service/consultant.service';
import { UnitService } from '../../../service/unit.service';
import { ProfileService } from '../../../service/profile.service';
import { UserService } from '../../../service/user.service';
import { Consultant } from 'app/model/consultant.model';
import { Unit } from '../../../model/unit.model';
import { Profile } from 'app/model/profile.model';
import { User } from 'app/model/user.model';
@Component({
selector: 'r-create-consultant-modal',
templateUrl: './create-consultant-modal.component.html',
styleUrls: ['./create-consultant-modal.component.scss'],
providers: [ConsultantService, UnitService, ProfileService, UserService]
})
export class CreateConsultantModalComponent implements OnInit {
public consultants: Consultant[] = [];
public consultantsFilteredList: Consultant[] = [];
public currentNewConsultant: Consultant = null;
public units: Unit[] = [];
public unitList: string[] = [];
public userRoles: Profile[] = [];
public unitManagers: User[] = [];
public activeUsers: User[] = [];
constructor(private consultantService: ConsultantService,
private unitService: UnitService,
private profileService: ProfileService,
private userService: UserService) {
this.getAllConsultants();
this.getAllUnits();
this.getAllRoles();
this.getAllFreeAndActiveUsers();
this.getAllUnitManagers();
this.currentNewConsultant = new Consultant(null, null, null, null, null, true, 0, null, null, null, true, null);
this.currentNewConsultant.unitManager = null;
}
ngOnInit() {
}
private getAddFeedback(emptyFields?: string): string {
if (!emptyFields) {
let message = "Can't add a Consultant without a ";
if (!this.activeUsers) message += 'User';
return message += '!';
}
return 'All fields are required!'
}
private updateNewConsultantProperty($event: any, property: string): void {
switch (property) {
case 'user':
this.currentNewConsultant.user = $event;
break;
case 'internal':
this.currentNewConsultant.internal = $event == 'Internal';
break;
case 'unitManager':
this.currentNewConsultant.unitManager = $event;
break;
case 'profile':
this.currentNewConsultant.profile = $event;
break;
default:
console.log('NOT IMPLEMENTED for updateProperty on NEW Consultant');
}
}
public cancel(){}
private allFieldsAreFilledIn() {
let c = this.currentNewConsultant;
return c.user
&& c.internal
&& c.hometown
&& c.skills
&& c.comment
&& c.individualCost;
}
public save() {
if (this.activeUsers) {
this.currentNewConsultant.profile = new Profile(this.userRoles[0].id, this.userRoles[0].name, this.userRoles[0].rate);
this.currentNewConsultant.user = this.activeUsers[0];
}
if (this.unitManagers) {
let max = this.activeUsers.length;
while (--max) {
if (this.activeUsers[max].role.toUpperCase() == 'UM') {
let um = this.activeUsers[max];
this.currentNewConsultant.unitManager = new User(um.id, um.unit, um.userActivityLogs, um.email, um.password,
um.firstName, um.lastName, um.shortName, um.employeeNumber, um.role, um.active);
}
}
}
}
private getAllConsultants() {
this.consultantService.getConsultants().subscribe(
consultantList => {
consultantList.forEach(c => this.consultants.push(
new Consultant(
c.id, c.user,
c.profile, c.proposition,
c.availableFrom, c.internal, c.individualCost,
c.hometown, c.skills, c.comment, c.active, c.plannings, c.unitManager)
)
);
},
error => {
console.log("Failed to get consultants data. Error message: " + error.message);
}
);
}
private getAllUnits() {
this.unitService.findAllUnits().subscribe(
unitList => {
let unitNames = ['All'];
unitList.forEach(unit => unitNames.push(unit.name));
this.unitList = unitNames;
this.units = unitList;
},
error => {
console.log("Failed to get units data. Error message: " + error.message);
}
);
}
private getAllRoles() {
this.profileService.findAllProfiles().subscribe(roles => {
this.userRoles = roles;
})
}
private getAllUnitManagers() {
this.userService.findAllUnitManagers().subscribe(ums => {
this.unitManagers = ums;
})
}
private getAllFreeAndActiveUsers() {
// Should be done in the backend but lack of time :'(, my apologies
this.userService.findAllActiveUsers().subscribe(users => {
const amountOfConsultants = this.consultants.length;
const amountOfUsers = users.length;
for (let j = 0; j < amountOfConsultants; j++) {
for (let i = 0; i < amountOfUsers; i++) {
const user = users[i];
if (user && user.email === this.consultants[j].user.email && user.role === 'Admin') {
users[i] = null;
}
}
}
for (let k = 0; k < amountOfUsers; k++) {
const user = users[k];
if (user) { this.activeUsers.push(user); }
}
})
}
}
最佳答案
@Jay Cummins 的回答对我有用。 (投了赞成票,但我无法回复以添加此额外信息)
我发现将样式表放在 angular.json 中不会触发自动构建。
我在玩,试图弄清楚为什么样式会解决问题,我发现我可以添加这个
@import '~@angular/material/prebuilt-themes/indigo-pink.css';
到我的 styles.css 的顶部。这会触发重建并修复问题。
关于css - matDialog 不作为对话框打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48481733/
我的应用程序中有一个表单,我通过以下方式声明它: = form_with model: project, remote: true, method: :put do |f| = f.select
我试图在 React 中使用 Axios 设置一个简单的帖子表单设置,但由于某种原因它似乎没有作为帖子请求发送,所以 Django 一直抛出 405 错误。 这是调用 axios 并处理表单的 rea
我无法将 xdebug 作为 Zend 扩展加载,因为 php.ini 自动放入错误的术语。 phpinfo() 中的消息是 XDEBUG NOT LOADED AS ZEND EXTENSION 我
在下面的代码中,当使用以下语句时,我能够将字符串 'fullname' 的内容写入指定目录中的文本文件:System.IO.File.WriteAllText(路径, 全名);但是,如果我将字符串路径
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: Problem of * in Command line argument 我编写了一个小型计算器的简单尝试,它可以
有没有办法捕获 html Canvas 的内容而不是像下面的示例中那样作为数据 url? Capture HTML Canvas as gif/jpg/png/pdf? 我想要这样做的原因是我想将 C
与 C# 中的代码约定相反,在 JML 中,代码约定只是在方法 header 中以注释形式使用的文本。那么,将它们作为注释公开不是更好吗?这样即使在编译时信息也会保留在 .class 的元数据中,与注
我正在学习 Express,并且根据文档我看到它包含一些与 Node.js 相同的功能。例如,request 和 response 据说与 Node 完全相同。 看这里: https://expres
我正在尝试使用 legendgrouptitle_text 在 python go.Scatter 上设置 legendgroup 标题,如 plotly doc 中所述: https://plotl
我正在尝试使用 pinax 开发网站。为了使用 djapian 为模型编制索引,我一直在尝试将 "manage.py index" 作为 cron 作业运行,但不断收到 pinax 错误。 “错误:没
我正在开发一个 Android 应用程序,它需要一个谷歌同步日历作为它的一部分。我无法使用 Intent 来显示 Android 日历 Activity 。它必须是应用程序的一部分。日历只占屏幕的一半
问题可能不是很具体,但我想知道如何使用 AngularJS + ASP.NET MVC 创建一个非真正的 SPA 应用程序。 我即将开始一个项目,AngularJS 非常适合前端:前端将有很多动态计算
我有一个功能可以在我的应用程序中显示即时通知,如果有人发送消息,我会向其他用户发送通知,就像您收到新消息一样。为此,我使用 Spring MVC + Stomp + WebSocket。 在我的本地/
我已经使用以下 build.gradle 文件(Gradle 版本 5.4.1)创建了一个 Spring Boot 应用程序: plugins { id 'org.springframewo
我有一个运行 Ubuntu 14.04 的 Digital Ocean Droplet (VPS)。我已经安装了s3cmd并且能够使用此命令成功运行同步: s3cmd sync --recursive
我目前使用 Sublime Text 2 进行 ColdFusion 编码。写这篇的时候 SELECT #createODBCDatetime(trim(arguments.foo))#
我定义了一个记录器实例如下: private static final Logger LOGGER = Logger.getLogger(Main.class.getName()); 我有一个要记录的
我正在尝试安装 Python 3 替代 python-mysql。我尝试使用推荐的 PyMySQL。但是在尝试迁移我的 Django 项目时,同样的错误仍然存在。 回溯: File "/home/
我正在尝试在 Ubuntu 12.04 上安装 Phusion Passenger。 当我尝试时: sudo passenger-install-apache2-module ...我明白了: sud
npm ERR! As of npm@5, the npm cache self-heals from corruption issues and data extracted from the ca
我是一名优秀的程序员,十分优秀!