angular - 动态表单生成Angular 5
问题描述
我正在实现多种登录表单。首先它会要求输入用户名和密码,然后是许可证等等。这是我目前的实现。
auth.component.ts
初始形式从>ngOnInit()
函数呈现。提交后它会调用login-service.ts
> submit()
then afterSubmit()
。在这里,我期待另一个 json 用于生成表单。我正试图通过我们在最初的情况下做到这一点来实现这一点。但是this.form
这个类中没有属性。我怎样才能做到这一点?
认证组件:
auth.component.html
<div class="container">
<div id="loginbox" style="margin-top:20%;" class="mainbox col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2">
<div class="panel panel-info">
<div class="panel-heading">
<div class="panel-title">Control Tower Login</div>
</div>
<div style="padding-top:30px" class="panel-body">
<div style="display:none" id="login-alert" class="alert alert-danger col-sm-12"></div>
<app-form-builder *ngIf="form" [form]="form" [service]="service" [submitButtonLabel]="'Login'"
[additionalButton]="'Cancel'"></app-form-builder>
</div>
</div>
</div>
</div>
auth.component.ts
@Component({
selector: 'app-auth',
templateUrl: './auth.component.html',
providers: [AuthService, LoginService]
})
export class AuthComponent implements OnInit {
@Input() formElements: any = [];
form: any;
message: any;
constructor(private router: Router, public authService: AuthService, private service: LoginService, public event: EventService) {
}
ngOnInit() {
this.form = [
{
"name": "username",
"inputType": "text",
"required": "false",
"placeholder": {
"readable": "Username",
"key": "form.login.placeholder.username"
},
"label": {
"readable": "Username",
"key": "form.login.label.username"
}
},
{
"name": "password",
"inputType": "password",
"required": "false",
"placeholder": {
"readable": "Password",
"key": "form.login.placeholder.password"
},
"label": {
"readable": "Password",
"key": "form.login.label.password"
}
}
];
}
}
登录服务.ts
import {Injectable} from '@angular/core';
import {FormBuilderService} from "../form-builder/form-builder.service";
import {CommunicatorService} from '@eqs/ng-communicator';
import {Router} from '@angular/router';
import {USER_SERVICE_ROUTES, LICENSE_FORM_FIELDS} from './user.constant';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
@Injectable()
export class LoginService extends FormBuilderService {
private response: any;
public step: number = 1;
private messageSource = new BehaviorSubject<any>("default message");
currentMessage = this.messageSource.asObservable();
constructor(protected communicator: CommunicatorService,
protected router: Router) {
super(communicator, router, USER_SERVICE_ROUTES.getUserCreateForm, USER_SERVICE_ROUTES.createUser);
}
afterSubmit(response: any) {
}
/**
* Submit the form
*
* @param model
*/
submit(model) {
console.log(model);
this.afterSubmit(model);
}
getResponse() {
return this.response;
}
}
解决方案
在登录服务中:
setForm(form){
this.form = form
}
在身份验证组件中:
ngOnInit() {
this.service.setForm(this.form);
}
推荐阅读
- javascript - 未找到 Laravel 6 css 和 js 文件( net::ERR_ABORTED 404 (Not Found) )
- javascript - 有没有比官方 eslint-watch 更快的 npm 包?
- php - 如何通过在php中添加多个值来修改现有cookie
- swift - 线程 1:signal SIGABRT Swift Xcode
- python - Pandas - 比较行中的列 ID 并有条件地删除
- mysql - 使用 ALTER TABLE 进行事务处理。如何实施?
- google-cloud-platform - Java 日志记录属性“com.google.cloud.logging.LoggingHandler.log”是某处的物理文件吗?
- javascript - 每次都将字符串映射到特定颜色?
- azure-pipelines - Azure 管道 - 仅针对特定用户继续执行
- python - 自定义用户模型使电子邮件独一无二但不区分大小写?