标签: angular2-forms

Angular 2 嵌套自定义组件中没有 FormGroupDirective 提供程序

在 Angular 2 RC.5 中,我找不到上述错误的修复:

Unhandled Promise rejection: Template parse errors:
No provider for FormGroupDirective ("p>Custom begin </p>
      <p>Host contains {{hostFormGroup.directives.length}} directives</p>
      [ERROR ->]<nested></nested>
      <p>Custom end </p>
    </div>
"): CustomComponent@4:6 ; Zone: <root> ; Task: Promise.then ; Value:
Run Code Online (Sandbox Code Playgroud)

当嵌套在另一个自定义组件中的自定义组件依赖于 contains 时,就会发生这种情况@Host() hostFormGroup: FormGroupDirective

这是一个展示场景的plunker 。AppComponent显示包含 CustomComponent 的反应式/模型驱动表单(暂时没有控件,但这并不重要) ,而CustomComponent又具有NestedComponent。有关错误详细信息,请参阅开发人员控制台。

第一级自定义组件可以依赖于托管FormGroupDirective或不依赖,这不会影响问题。如果它具有依赖性,则可以正确解决。无论第一级组件如何,第二级自定义组件都不会发生同样的情况。

如果直接在AppComponent中使用相同的NestedComponent,问题就会消失。

我缺少什么?TA

主要部分代码如下,供参考:

Unhandled Promise rejection: Template parse errors:
No provider for FormGroupDirective ("p>Custom begin </p>
      <p>Host …
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular

2
推荐指数
1
解决办法
2万
查看次数

Angular 2 Reactive Forms:更新值更改的选择列表

我有一个使用ReactiveForms构建的Angular 2表单.表单包含2个选择元素.第一个包含车辆制造清单.从列表中选择make时,第二个select元素应显示属于该make的模型.

我一直在玩valueChanges,但我似乎无法获得第二个(子)选择元素来包含所选make的模型.当两个字段都只是简单的输入元素时,对valueChanges做出反应实际上会更新模型输入元素(使用模型FormControl上的setValue).有关简单输入字段,请参阅以下代码示例

是否有可能通过Reactive Forms实现这一目标?

this.vehicleForm.controls['make'].valueChanges.subscribe((value) => {
  console.log(value);
  this.vehicleForm.controls['model'].setValue('Some Value');
});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,'value'实际上是所选的make对象.

angular2-forms angular

2
推荐指数
1
解决办法
2万
查看次数

控制角度重置事件

我正在编写自己的组件并想要进行自定义重置(我需要清理一些标签等)

因此,当有人打电话时,this.form.reset();我想响应此事件并进行一些清理操作。

我不想要求开发人员为我的组件发送自定义重置,例如 this.form.reset({myControl: null})

我只想对表单重置做出反应。你可以帮帮我吗?我怎样才能做到呢?我使用 ReactiveAngular 表单

例子:

<form ...>
  <my-own-component formControlName="fieldName"></my-own-component>
</form>
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular

2
推荐指数
1
解决办法
2374
查看次数

如何在为 html 和 angular 中的属性赋值之前设置条件?

<div #dataContainer class="infills richtextbox {{field.groupid}}"
                    contentEditable="true" 
                    *ngIf="field.fieldtype=='text'"
                    id="{{field.id}}" 
                    name="{{field.id}}" 
                    [ngStyle]="{'position':'absolute','top':field.y+'px','left':field.x+'px','font-size': field.fontsize,'font-family':field.fontfamily,'width':field.width+'px','height':field.height+'px','border':'1px solid #FFF','background':'#EEE','overflow':'hidden' }"
                    title="{{field.description}}"
                    [(ngModel)]="field.value" 
                    (keypress)="_keyPress($event,field.pattern)"
                    (dblclick)="openFullRTE(field.id)" 
                    (focusout)="field.htmlContent=dataContainer.innerHTML;">
</div>
Run Code Online (Sandbox Code Playgroud)

在这里,我想看看field.description是否具有值“desc”,如果是,则将值分配为空给title属性,否则它可以包含 field.description 中的值。我怎样才能做到这一点?可以使用三元运算符吗?

html angular2-forms angular2-template angular

2
推荐指数
1
解决办法
1344
查看次数

无法读取未定义的角度 2 的属性“用户名”

我尝试了很多解决方案,但没有一个能帮助我解决这个问题......无法弄清楚我的代码中有什么问题......

HTML 代码 ::

<input type="text" class="form-control"  placeholder="Please Enter Your Username" [(ngModel)]="currentUser.UserName" minlength="3" required id="userNameBox" name="UserName" #uName="ngModel">
Run Code Online (Sandbox Code Playgroud)

组件代码 ::

    profile() {
        let uid = Number(sessionStorage.getItem('id'));
        this._homeService.profile(uid).subscribe(
            res => {
            this.currentUser = res

                console.log(this.currentUser);

});
Run Code Online (Sandbox Code Playgroud)

服务 ::

profile(id: number) {

        return this._http.get(url, id).map(
            (res: Response) => {
                console.log(res.json())
                return new User(res.json()

                ) }
        ).catch(this.handleError);
    }
Run Code Online (Sandbox Code Playgroud)

模型 ::

export class User {

constructor(json: any) {
    if (json != null) {
        this.Id = json.Id;
        this.UserName = json.UserName;
        this.FirstName = json.FirstName;
        this.LastName = json.LastName; …
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular2-template angular2-services angular

2
推荐指数
1
解决办法
6620
查看次数

由于 ngIf 保持对组件的引用隐藏

我有一个问题 div,它使用 ngFor 生成一些子组件。这些子组件具有用于数据的输入字段。当用户在这些字段中输入数据并单击下一个按钮时,问题 div 会被 ngIf 隐藏并显示预览 div。当再次按下后退按钮时,预览 div 会与 ngIf 一起隐藏并出现问题 div。但是因为问题 div 中的子组件再次创建,所以输入字段中的数据消失了。以下是我的html

<!-- questions

     div-->
    <div class="questions activity_screen" *ngIf="showquestions">
                <div *ngFor="let component of components;let i=index">
                    <app-termhost #cmp [term] = component [title]="component.title" [Qnumber]="i+1"></app-termhost>
                </div>
                <a class="submit_button" (click)="getdata()">Submit</a>
            </div>
        <!-- preview div-->
            <div style="width: 100%;height: 100%;display: flex;align-content: center;justify-content: center" class="preivew" *ngIf="showpdf">
                <button (click)="goback()">go back</button>
            </div>
Run Code Online (Sandbox Code Playgroud)

如何保持这些组件的先前状态,以便在按下后退按钮后再次出现问题 div 后数据不会丢失!

angular2-forms angular2-directives angular2-template angular

2
推荐指数
1
解决办法
1084
查看次数

ngModel 的 Angular 2/4/5 Material Dialog 问题

我觉得这是一个愚蠢的问题,但我就是不明白为什么它不起作用......

我有一个材质 2 对话框,这是对话框组件

import { AfterViewInit, Component, Injectable } from '@angular/core';
import { FlexLayoutModule } from '@angular/flex-layout';
import { MatDialog, MatDialogRef } from '@angular/material';

import 'rxjs/add/operator/toPromise';

// services
import { DialogService } from '../../../services/dialog.service';

@Component({
  selector: 'app-dialog-asset-upload',
  templateUrl: './dialog-asset-upload.component.html',
})

@Injectable()
export class DialogAssetUploadComponent {

  constructor(private dialog: MatDialog, private dialogS: DialogService) { }

  // open dialog
  open(): Promise<any[]> {

    // open dialog
    let dialogRef = this.dialog.open(DialogAssetUploadComponentDialog, {});

    return dialogRef.afterClosed().toPromise().then(res => {

      console.log('in asset upload',res);
      return res;
    });
  }
} …
Run Code Online (Sandbox Code Playgroud)

dialog angular-material angular2-forms angular-material2 angular

2
推荐指数
1
解决办法
3836
查看次数

错误:初始化后无法更改选择的“多重”模式

错误图像:

错误图片

 <div fxFlex.gt-lg="100" fxFlex="100" *ngIf="requestAction == 'add'">
                    <div class="pb-1">
                            <md2-select placeholder="{{'WidgetType'|translate:lang}}" class="input_custom_width"(change)="widgetNode($event.value)"  required>
                                <md2-option *ngFor="let widgetType of widgetTypeAry" [value]="widgetType.value">
                                    {{widgetType.name}}
                                </md2-option>
                            </md2-select>
                    </div>
                </div>
              <div fxFlex.gt-lg="100" fxFlex="100" *ngIf="fieldsObj['node'] && showRequestAction" >
                <div class="pb-1">
                    <md2-select placeholder="{{'Node'|translate:lang}}" [formControl]="editWidgetForm.controls['nodeId']" [(ngModel)]="nodeId" class="input_custom_width" [(multiple)]="isMultiNode" (change)="nodeChange($event.value)" required>
                        <md2-select-header>
                            <md-input-container class="input_custom_width">
                                <input mdInput type="text" placeholder="{{'Search'| translate:lang}}" [ngModelOptions]="{standalone: true}" [(ngModel)]="searchNode"/>
                            </md-input-container>
                        </md2-select-header>
                        <md2-option *ngFor="let node of nodesAry | filterPipe : searchNode" [value]="node.value">
                            {{ node.name }}
                        </md2-option>
                    </md2-select>
                    <small *ngIf="editWidgetForm.controls['nodeId'].hasError('required') && editWidgetForm.controls['nodeId'].touched" class="mat-text-warn">{{'nodeReq'|translate:lang}}</small>
                </div>
              </div>
Run Code Online (Sandbox Code Playgroud)

当我在 select 下拉列表中使用 multiple …

html angular2-forms angular2-template angular angular4-forms

2
推荐指数
1
解决办法
1281
查看次数

如何将角材料表单包装到组件中并将它们作为 formControl 元素公开给 FormGroup

我正在尝试将一个组件(例如称为custom-input)封装为基于 Angular 材质组件的 formControl 元素,以包含以下内容:

<mat-form-field >
  <input
    matInput
    [formControl]="inputField"
    formControlName="{{ name }}"
    name="{{ name }}"
    maxlength="{{ maxlength }}"
    placeholder="{{ name | translate }}"
    required
  />
  <mat-error *ngIf="inputField.errors">{{
    this.validationService.getErrorMsg(inputField.errors)
  }}</mat-error>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)

现在这个组件正在使用所需的功能,但不能像普通输入或 matInput一样使用 formControlName 属性绑定到 formGroup(例如下面的例子,它直接绑定到 formGroup 没有问题)

<input
  matInput
  formControlName="inputField123"
  placeholder="{{ 'testInput' | translate }}"
  required
/>
Run Code Online (Sandbox Code Playgroud)

问题是如何让上面的组合组件绑定为formGroup中的formControl元素?我应该实现或公开什么来提供此功能?

我应该使用 ControlValueAccessor 还是有更好的方法用于材质输入组件?

javascript typescript angular2-forms angular angular-reactive-forms

2
推荐指数
1
解决办法
1857
查看次数

不推荐使用 Angular FormBuilder 组

我看到有一个主题看起来像我的,但它并没有真正回答我的问题,因为我们没有以相同的方式管理错误。不推荐使用 FormBuilder 组

首先,我刚刚迁移到 Angular 11,现在遇到了这个问题:

group is deprecated: This api is not typesafe and can result in issues with Closure Compiler renaming.
Use the `FormBuilder#group` overload with `AbstractControlOptions` instead.
Run Code Online (Sandbox Code Playgroud)

在此页面中,我会在页面上自动生成许多表单,在日期范围的情况下,我使用两个日期选择器。我创建了一个函数来检查 2 个日期选择器中的值。

成分:

newGroup = this.fb.group(
        {
          [node.type + '_' + node.objectId + '_dateFrom']: [
            '',
            [Validators.required]
          ],
          [node.type + '_' + node.objectId + '_dateTo']: [
            '',
            [Validators.required]
          ]
        },
        {
          validator: CheckFromToDate(
            node.type + '_' + node.objectId + '_dateFrom',
            node.type + '_' + node.objectId + '_dateTo'
          ) …
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular2-formbuilder angular-validation angular angular2-form-validation

2
推荐指数
1
解决办法
1986
查看次数