小编Joã*_*tti的帖子

禁用Angular 5输入字段的正确方法

我有一个像这样创建的FormGroup:

form: FormGroup;

constructor(private _formBuilder: FormBuilder) { }

this.form = this._formBuilder.group({
  name: ['', Validators.required],
  email: ['', Validators.required, Validators.email]
});
Run Code Online (Sandbox Code Playgroud)

当事件发生时,我想禁用这些输入,因此,在我添加的HTML中:

<input class="form-control" placeholder="Name" name="name" formControlName="name" [(ngModel)]="name" autocomplete="off" [disabled]="isDisabled" required>

<input class="form-control" placeholder="Email" name="email" formControlName="email" [(ngModel)]="email" email="true" autocomplete="off" [disabled]="isDisabled" required>
Run Code Online (Sandbox Code Playgroud)

当发生上述事件时,isDisabled我将切换到哪里true

可以想象,我收到消息:

看来您正在使用带有反应形式指令的Disabled属性。如果在组件类中设置此控件时将Disabled设置为true,则实际上将在DOM中为您设置disabled属性。我们建议使用这种方法来避免“检查后更改”错误。

  Example: 
  form = new FormGroup({
    first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),
    last: new FormControl('Drew', Validators.required)
  });
Run Code Online (Sandbox Code Playgroud)

因此,通过显示该警告的示例并进行了一些搜索,我发现我应该声明自己的控件,例如:

name: [{ value: '', disabled: this.isDisabled }, Validators.required]
Run Code Online (Sandbox Code Playgroud)

问题是:当变量在两个变量之间切换时,它不会在禁用/启用之间切换true/false

如何使变量控制输入是启用还是禁用的正确方法?

我不想手动执行该操作(例如:),this.form.controls['name'].disable() …

html javascript angular angular-forms

16
推荐指数
6
解决办法
3万
查看次数

访问SCSS文件Angular 2中的组件变量

是否可以在.scss为该组件定义的文件内访问组件变量?
例如:

example.component.ts

@Component({
  selector: 'example-selector',
  templateUrl: 'example.component.html',
  styleUrls: ['example.component.css']
})
export class ExampleComponent {
  @Input() size: number;
}
Run Code Online (Sandbox Code Playgroud)

example.component.scss

.some-class {
  width: calc(100% - {{ size }};
}
Run Code Online (Sandbox Code Playgroud)

如果没有,如何解决?

谢谢。

css sass angular

5
推荐指数
1
解决办法
3519
查看次数

NgRx - 无法从 CustomSerializer Router Store 访问多级路由参数

我有一个声明如下的路径:

{
  path: 'app/:userId',
  children: [...AppChildrenRoutes]
}
Run Code Online (Sandbox Code Playgroud)

然后,在 AppChildrenRoutes 中

{ path: 'feature', component: MainFeatureComponent }
Run Code Online (Sandbox Code Playgroud)

因此,在我的应用程序的某个时刻,我可以拥有localhost:4200/app/123/feature. 在这个组件中,通过一些操作,我可以导航到另一个这样的路线:

this.router.navigate([
  'app',
  this.userId,
  'feature',
  { search: this.searchFor }
]);
Run Code Online (Sandbox Code Playgroud)


将其视为正在改变架构的大型企业级应用程序,逐步使用 NgRx。
所以,我遇到了路由器商店的问题。我已经设置了一切并且它有效。
按照 Router Store docs我写了一个自定义序列化程序,它看起来像这样

serialize(routerState: RouterStateSnapshot): RouterStateUrl {
  const { url } = routerState;
  const queryParams = routerState.root.queryParams;

  while (route.firstChild) {
    route = route.firstChild;
  }
  const params = route.params;

  return { url, queryParams, params };
}
Run Code Online (Sandbox Code Playgroud)

我发现,考虑到像这样的 URI

localhost:4200/app/123/feature;search=blue
Run Code Online (Sandbox Code Playgroud)

route.params只返回searchPARAM,不能同时userIdsearch …

redux ngrx angular ngrx-router-store

3
推荐指数
1
解决办法
506
查看次数

标签 统计

angular ×3

angular-forms ×1

css ×1

html ×1

javascript ×1

ngrx ×1

ngrx-router-store ×1

redux ×1

sass ×1