angular - Oupptäckt fel: Kan inte tilldela en referens eller > variabel! > vid _AstToIrVisitor.visitPropertyWrite


Jag följde ett exempel från angular.io-webbplatsen om hur man skapar ett formulär i Angular med ett inputfält, men jag har fastnat på ett fel:

compiler.js:26390 Okänt fel: Kan inte tilldela till en referens eller variabel! vid _AstToIrVisitor.visitPropertyWrite (webpack-internal:///./node_modules/@angular/compiler/esm5/compiler.js:26611:23) vid PropertyWrite.visit (webpack-internal:///./node_modules/@angular/compiler/esm5/compiler.js:4900:24) vid convertActionBinding (webpack-internal:///./node_modules/@angular/compiler/esm5/compiler.js:26035:45) vid eval (webpack-internal:///./node_modules/@angular/compiler/esm5/compiler.js:28635:22) vid Array. forEach() vid ViewBuilder._createElementHandleEventFn (webpack-internal:///./node_modules/@angular/compiler/esm5/compiler.js:28631:18) vid nodes.(anonym funktion) (webpack-internal:///./node_modules/@angular/compiler/esm5/compiler.js:28050:27) vid eval (webpack-internal:///./node_modules/@angular/compiler/esm5/compiler.js:28576:22) vid Array.map() vid ViewBuilder._createNodeExpressions (webpack-internal:///./node_modules/@angular/compiler/esm5/compiler.js:28575:56)

Den enda ändringen jag gjorde var att byta namn på "name" till "username".

dashboard.component.ts

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-dashboard',
  templateUrl: './dashboard.component.html',
  styleUrls: ['./dashboard.component.css']
})
export class DashboardComponent implements OnInit {

  username: string;
  submitted = false;

  constructor() { 
  }

  ngOnInit() {
  }

  onSubmit() { this.submitted = true; }

}

dashboard.component.html

<div class="row justify-content-md-center">
    <div class="col col-lg-12">
      <form (ngSubmit)="onSubmit()" #usernameForm="ngForm" >
        <div class="form-group">
          <label for="username">Name</label>                    

          <input type="text" class="form-control" id="name"
          required
          [(ngModel)]="username" name="name"
          #username="ngModel">

          <div [hidden]="username.valid || username.pristine"
              class="alert alert-danger">
            Name is required
          </div>
        </div>
        <button type="submit" class="btn btn-success">Submit</button>
      </form>
    </div>
</div>

Vad är fel i koden ovan?

Svar #1

Ditt problem är här:

[(ngModel)]="username" name="name"
      #username="ngModel">

När du gör detta skapar du en variabel username för din mall, som refererar till NgModel-instansen. Så när du binder ngModel till username tror kompilatorn att du binder till referensen, inte till din komponents username-egenskap, eftersom mallvariabler döljer komponentegenskaper med samma namn. Ändra namnet på referensen till usernameModel eller något liknande (och kom ihåg att ändra det överallt där du använder det, även i div som visar fel) så bör det fungera bra.

Relaterade artiklar