2017-01-21 46 views
2

我看到一个试图通过模板引用变量引用一个NgModel指令时“无法读取属性未定义的‘有效’”的错误 - 但只有当它包裹在一个*ngIfAngular2:当与ngIf指令包裹ngModel不工作

这里表现出的问题的例子形式:

<form (ngSubmit)="true"> 
    <div [ngClass]="dom_email_ok.valid ? 'one' : 'two'"> 
    <span><input [(ngModel)]="email" #dom_email_ok="ngModel" required name="email" /></span> 
    </div> 
    <div [ngClass]="dom_email_bad.valid ? 'one' : 'two'"> 
    <span *ngIf="true"><input [(ngModel)]="email" #dom_email_bad="ngModel" required name="email" /></span> 
    </div> 
</form> 

这里的Plunker:http://plnkr.co/edit/3xrqCVv7qE1FQjdTdzXP

也能正常工作的第一input。当它试图设置基础上,input包裹在一个*ngIf类出现的错误:

TypeError: Cannot read property 'valid' of undefined 
    at CompiledTemplate.proxyViewClass.View_App0.detectChangesInternal (/AppModule/App/component.ngfactory.js:259:51) 
    at CompiledTemplate.proxyViewClass.AppView.detectChanges (https://unpkg.com/@angular/core/bundles/core.umd.js:12726:18) 

具体来说,生成的代码看起来像这样的作品之一:

var currVal_8_0_0 = (self._NgModel_11_7.context.valid? 'one': 'two'); 

...它看起来像这样的一个不工作:

var currVal_14_0_0 = (self.context.dom_email_bad.valid? 'one': 'two'); 

在此功能中,self.context是组件本身,所以它没有dom_email财产(只有nameemail)。

回答

1

不能的*以外使用ngIf一个* ngIf内声明的变量。

但是你可以使用这个:

<div> 
    <h2>Hello {{name}}</h2> 
    <form (ngSubmit)="true"> 
    <div [ngClass]="dom_email_ok.valid ? 'one' : 'two'"> 
     <span><input [(ngModel)]="email" #dom_email_ok="ngModel" required name="email" /></span> 
    </div> 
    <div [ngClass]="dom_email_bad.valid ? 'one' : 'two'" *ngIf="true"> 
     <span ><input [(ngModel)]="email" #dom_email_bad="ngModel" required name="email" /></span> 
    </div> 
    </form> 
</div>