Angular 8 NgFor 仅支持绑定到 Iterables,例如 Arrays error 和 Access Control Allow origin

Kin*_*dth 2 spring-restcontroller angular cross-origin-read-blocking

我有一个模型:

export class Employe {    
    constructor(public id?: any,
        public nom?: String,
        public prenom?: String,
        public cin?: String){}    
}
Run Code Online (Sandbox Code Playgroud)

员工.component.ts

ngOnInit(){
    this.loadEmployes();
}    

 pageEmployes:any={};

  loadEmployes():Observable<any>{    
     this.http.get("http://localhost:8080/api/employe").subscribe(
      data=>{
        console.log(data);
        this.pageEmployes = data;

      }, err=>{
        console.log(err);
      }
    );
    return this.pageEmployes;
  }
Run Code Online (Sandbox Code Playgroud)

员工.component.html

 <tr *ngFor="let item of pageEmployes">         
      <td>{{item.nom}}</td>
      <td>{{item.prenom}}</td>    
    </tr>
Run Code Online (Sandbox Code Playgroud)

协作控制器.java

@RestController

@RequestMapping("/api/employe")

@CrossOrigin("*")

public class CollaborateurController {

    @Autowired
    private CollaborateurRepository collaborateurRepository;

    @RequestMapping(value="", method=RequestMethod.GET)
    public List<Collaborateur> getEmp() {
        return (List<Collaborateur>) collaborateurRepository.findAll();
    }
Run Code Online (Sandbox Code Playgroud)

这引发了我的错误:

ERROR 错误:找不到类型为“object”的不同支持对象“[object Object]”。NgFor 仅支持绑定到可迭代对象,例如数组。

从源“ http://localhost:4200 ”访问“ http://localhost:8080/api/employe ”的XMLHttpRequest已被 CORS 策略阻止:没有“Access-Control-Allow-Origin”标头存在于请求的资源。

小智 7

您正在尝试通过代码示例的外观迭代(循环)一个对象,而不是一个数组。

这部分是假的:

pageEmployes:any={};
Run Code Online (Sandbox Code Playgroud)

并且应该改为:

pageEmployes: Employe[] = [];
Run Code Online (Sandbox Code Playgroud)

“= {};” 初始化一个新对象

“= [];” 初始化一个新的可迭代列表