使用ngValue传递对象的Angular 2返回无法读取未定义的属性....

时间:2017-03-14 20:55:44

标签: angular angular2-template angular2-forms

当我在我的模板中使用它时:

<select [(ngModel)]="selectedCompany" class="form-control">
    <option *ngFor="let company of companies" [ngValue]="company">{{company.Name}}</option>
</select>
{{selectedCompany}}

{{selectedCompany}}的值为[object Object]。但是,当我尝试Name selectedCompany这样的{{selectedCompany.Name}} 属性时:

{{company.Name}}

我收到以下错误:

  

EXCEPTION:未捕获(在承诺中):错误:./ HomeComponent类中的错误HomeComponent - 内联模板:60:10导致:无法读取未定义的属性“名称”

我想弄清楚为什么我会收到这个错误。我认为该属性存在,因为public class DirectoryListingPerfTest implements FileFilter { private final SortedSet<File> _dirs = new TreeSet<>(); @SuppressWarnings("cast") @Override public boolean accept( File pathname ) { if( pathname instanceof File ) { _dirs.add( pathname ); } else { System.err.println( pathname.getClass()); } return false; } static native void find( String path, FileFilter listener ); public static void main( String[] args ) { System.loadLibrary( "fs_DirectoryListingPerfTest" ); final DirectoryListingPerfTest ff = new DirectoryListingPerfTest(); long atStart, elapsed; atStart = System.nanoTime(); find( "/usr", ff ); elapsed = System.nanoTime() - atStart; System.err.printf( "native(1): %,9.2f ms\n", elapsed / 1.0E+06 ); atStart = System.nanoTime(); find( "/usr", ff ); elapsed = System.nanoTime() - atStart; System.err.printf( "native(2): %,9.2f ms\n", elapsed / 1.0E+06 ); } } 有效。

1 个答案:

答案 0 :(得分:1)

那是因为在模板渲染时没有定义selectedCompany。你有两个解决方案:

  1. 使用安全导航操作员(?)“保护”您的模板,直到selectedCompany填充数据:

    {{selectedCompany?.Name}}
    
  2. 在组件中初始化selectedCompany变量:

    selectedCompany = {};
    
  3. 其中任何一个都可以解决问题。