You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular 2应用的文本输入框中显示用户名?

看起来你是想把从userService获取到的用户名填充到文本输入框里,而不是只作为占位符显示对吧?结合你给出的代码片段,我分两种常见场景给你解决方案:


场景1:每个用户对应一个输入框,默认显示该用户的名字

你现在的代码里所有输入框都绑定到同一个screen.createdBy,这会导致所有输入框的值同步变化,而且只是把用户名放在占位符里,并不是实际填充到输入框中。可以这样修改:

<div class="row" *ngFor="let user of users; let i = index">
  <div class="col-md-5 mb-2">
    <label>Researcher:</label>
    <!-- 注意name和id要加索引保证唯一性,避免表单验证冲突 -->
    <input 
      id="createdBy-{{i}}" 
      type="text" 
      class="form-control" 
      [(ngModel)]="screen.createdByList[i]" <!-- 用数组存储每个用户的输入值 -->
      name="createdBy-{{i}}" 
      required 
      #createdBy="ngModel" 
      [value]="user.firstName" <!-- 初始化显示当前用户的名字 -->
      placeholder="修改研究者名称"
    >
  </div>
</div>

同时在组件里要初始化对应的数组:

// 组件类中
screen = {
  createdByList: []
};

ngOnInit() {
  this.userService.getUsers().subscribe(users => {
    this.users = users;
    // 初始化输入框值为每个用户的名字
    this.screen.createdByList = this.users.map(user => user.firstName);
  });
}

如果只是想展示用户名不允许修改,直接加readonly属性即可:

<input 
  ...
  [(ngModel)]="user.firstName"
  readonly
>

场景2:选择用户后填充到单个输入框

如果你的需求是先列出用户,选择后把名字填充到单个输入框里,那不需要在输入框上循环,而是把循环用在用户选择控件上,比如下拉框:

<div class="col-md-5 mb-2">
  <label>Researcher:</label>
  <select 
    class="form-control" 
    [(ngModel)]="screen.createdBy"
    name="createdBy"
    required
    #createdBy="ngModel"
  >
    <option value="">请选择研究者</option>
    <option *ngFor="let user of users" [value]="user.firstName">{{user.firstName}}</option>
  </select>
</div>

要是想用按钮选择的方式,也可以这么写:

<!-- 用户选择按钮组 -->
<div class="row" *ngFor="let user of users">
  <div class="col-md-5 mb-2">
    <button class="btn btn-outline-primary" (click)="fillUserName(user)">选择 {{user.firstName}}</button>
  </div>
</div>

<!-- 单个输入框 -->
<div class="col-md-5 mb-2">
  <label>Researcher:</label>
  <input 
    id="createdBy" 
    type="text" 
    class="form-control" 
    [(ngModel)]="screen.createdBy" 
    name="createdBy" 
    required 
    #createdBy="ngModel" 
    placeholder="已选择的研究者名称"
  >
</div>

然后在组件里添加对应的方法:

fillUserName(user: any) {
  this.screen.createdBy = user.firstName;
}

内容的提问来源于stack exchange,提问作者Fabian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:18:55