微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在页面的初始加载中,加载下拉列表后未设置我的SelectedPerson对象

如何解决在页面的初始加载中,加载下拉列表后未设置我的SelectedPerson对象

我有一个示例Angular页面,该页面未在启动时设置绑定的SelectedPerson变量。

页面加载,加载下拉菜单并正确选择了第三个项目(X3),但是未设置绑定的变量{SelectedPerson}。当我手动选择一个项目时,它会起作用。

这是我的代码。您可以在以下位置运行测试。 https://stackblitz.com/edit/personselector1?file=src/app/app.component.ts

HTML

<div>
    <select class="form-control" name="PersonSelector" (ngModelChange)="onPersonChange($event)"
        [(ngModel)]="SelectedPerson" [compareWith]="byPersonId">
        <option *ngFor="let r of lstPerson" [ngValue]="r">{{r.PersonNumber}} - {{r.PersonName}}</option>
    </select>

  <br><br>

  <label>Person ID: {{SelectedPerson.PersonNumber}}</label><br>
  <label>Person Number: {{SelectedPerson.PersonNumber}}</label><br>
  <label>Person Name: {{SelectedPerson.PersonNumber}}</label><br>

  <br>

    <button  (click)="GetSelected()">Get Selected</button>  
   <label>  Person Name: {{mySelectedMessage}}</label><br>

</div>  

TYPESCRIPT

import { Component,VERSION } from '@angular/core';
import { PersonInfo } from './PersonInfo';

@Component({
  selector: 'my-app',templateUrl: './app.component.html',styleUrls: [ './app.component.css' ]
})
export class AppComponent  
{
  //
  //    Globals
  //  
  mySelectedMessage: any = 'nothing'

  lstPerson: any = [];

  SelectedPerson: PersonInfo = 
  {
    PersonID: null,PersonNumber: null,PersonName: null
  } 

  //
  //    Init
  //
  ngOnInit() 
  {
    this.LoadPersonList();
  } 

  //
  //    display Selected Person
  //
  GetSelected()
  {
    this.mySelectedMessage = this.SelectedPerson.PersonName;
    console.log('SelectedPerson',this.SelectedPerson)
  }
    
  //
  //    Load Dropdown
  //
  LoadPersonList() 
  {
    var temp = [
        { PersonID: 1,PersonNumber: 'X1',PersonName: 'Dave Smith' },{ PersonID: 2,PersonNumber: 'X2',PersonName: 'Tammy Spoon' },{ PersonID: 3,PersonNumber: 'X3',PersonName: 'Rosy Cheeks' },{ PersonID: 4,PersonNumber: 'X4',PersonName: 'Don Key' },];    

    this.lstPerson = temp;

    if (this.lstPerson.length > 1) 
    {
      this.lstPerson.unshift(
      {
        PersonID: 0,PersonNumber: "- Select a Person",PersonName: ""
      })
      } 
      else 
      {
      this.SelectedPerson = this.lstPerson[0];
      }         

  }

  //
  //    byPersonId - For [compareWith] in .html
  //
  byPersonId(item1: any,item2: any) 
  {
    return item1.PersonID === 3;
  }

  //
  //    onPersonChange - Person Selector Change
  //
    onPersonChange(value) 
    {
    //this.mySelectedMessage = value.PersonName;
    console.log("Person Change: ",value);
    }  
}

PersonInfo

export interface PersonInfo
{
    PersonID: number,PersonNumber: string,PersonName: string
}

解决方法

我已经解决了这个问题。工作代码在这里。

https://stackblitz.com/edit/personselectorv2?file=src/app/app.component.ts

,

如果我正确理解问题。 LoadPersonList中的功能this.SelectedPerson = this.lstPerson[0];将不会执行。删除包装此功能的else块可以解决您的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?