元素访问表达式应该带参数

Hem*_*ant 8 typescript angular

我是Angular的新手我试图创建一些示例应用程序,但收到错误.请帮忙.我试图从googles项目(https://stackblitz.com/angular/ooqemvjyqkb?file=src%2Fapp%2Fheroes%2Fheroes.component.ts)创建我自己的项目当我从"users = User [];"中删除数组时 它工作正常但它不提供构建([ts]类型'用户[]'不能分配给'typeof User'.).使用"users = User [];" 它甚至没有编译(建议[ts]元素访问表达式应该采用参数.(任何)).

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

import { User } from '../user';
import { UserService } from '../user.service';

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

  selectedUser: User;

  users = User[]; // review use of array type. users = User[];

  constructor(
    private userService: UserService
    ) { }

  ngOnInit() {
    this.getUsers();
  }

  onSelect(user: User): void {
    this.selectedUser = user;
  }

  getUsers(): void {
    this.userService.getUsers()
    .subscribe(users => this.users = users);
  }

    save(): void {
    this.userService.updateUser(this.users);
  }

  add(name: string): void {
    console.log(name);
    name = name.trim();
    if (!name) { return; }
    this.userService.addUser({ name } as User)
      .subscribe(user => {
        this.users.push(user);
      });
  }
}
Run Code Online (Sandbox Code Playgroud)

////////////////////user.ts///////////////

export class User {
    id: number;
    name: string;
  }
Run Code Online (Sandbox Code Playgroud)

///////////////user.service.ts////////////////

import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { HttpClient, HttpHeaders } from '@angular/common/http';

import { User } from './user';
// import { USERS } from '../assets/data/userData';

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};

@Injectable({ providedIn: 'root' })

export class UserService {

  private usersUrl = 'api/users';

  constructor(
    private http: HttpClient) { }

  getUsers(): Observable<User[]> {
    // return of(USERS);
    return this.http.get<User[]>(this.usersUrl);
  }

  /** GET user by id. Will 404 if id not found */
getUser(id: number): Observable<User> {
  const url = `${this.usersUrl}/${id}`;
  return this.http.get<User>(url);
}

/** PUT: update the user on the server */
updateUser (user: User): Observable<any> {
  return this.http.put(this.usersUrl, user, httpOptions);
}

/** POST: add a new user to the server */
addUser (user: User): Observable<User> {
  return this.http.post<User>(this.usersUrl, user, httpOptions);
}

/* GET users whose name contains search term */
searchUsers(term: string): Observable<User[]> {
  if (!term.trim()) {
    // if not search term, return empty hero array.
    return of([]);
  }
  return this.http.get<User[]>(`${this.usersUrl}/?name=${term}`);
}

}
Run Code Online (Sandbox Code Playgroud)

D1*_*23 22

更换

users = User[];
Run Code Online (Sandbox Code Playgroud)

user: User[]
Run Code Online (Sandbox Code Playgroud)

这应该够了吧.


Pip*_*ipo 9

对我来说正确的语法不是

user: User[] = User[] // WRONG SYNTAX
Run Code Online (Sandbox Code Playgroud)

users: User[] = []
Run Code Online (Sandbox Code Playgroud)

或者

users: User[] = new Array<User>()
Run Code Online (Sandbox Code Playgroud)


amr*_*cel 7

尝试:

    users = [Users];
Run Code Online (Sandbox Code Playgroud)

我发现语法往往效果更好。