angular - Angular2: Nu se poate găsi un diferențiator care să suporte obiectul din clasa serviciu


Urmez un curs pe Udemy - Angular 2 cu TypeScript pentru Începători și am întâlnit o eroare care nu îmi este foarte clară în ceea ce privește Serviciile.

Am un component care afișează o listă de cursuri. Sau o listă de șiruri de caractere sub formă de array-uri.

Așa cum implică cursul, în viața reală nu vei primi o listă de elemente codificate direct, ci vei apela un serviciu pentru a o obține. Exemplul apelează o altă clasă de serviciu pentru a o obține (pentru moment, această clasă returnează o listă codificată direct).

Am o clasă de serviciu numită CourseService care returnează un șir de șiruri:

export class CourseService {
    getCourses() : string[] {        
        return ["Course1", "Course2", "Course3"];
    }

}

și componenta mea are un șablon care folosește un *ngFor pentru a parcurge o variabilă locală numită courses. Variabila courses este instanțiată prin preluarea array-ului din clasa de serviciu folosind injecția de dependență în constructor:

import {Component} from 'angular2/core'
import {CourseService} from './course.service'

@Component({
    selector: 'courses',
    template: `
        <h2>Courses</h2>
        {{ title }}
        <ul>
            <li *ngFor="#course of courses">
                {{ course }}
            </li>
        </ul>
        `,
        providers: [CourseService]
})
export class CoursesComponent{
    title: string = "The titles of courses page"
    courses;    

    constructor(courseService:CourseService) {                
        //if i get the courses array from the courseService I get the following error in the browser
        /*angular2.dev.js:23083 EXCEPTION: Cannot find a differ supporting object 'function () {
                    return ["Course1", "Course2", "Course3"];
                }' in [courses in CoursesComponent@4:16]
        I cannot see what is wrong at line 4 in CoursesComponent as it is returning the same string*/
        this.courses = courseService.getCourses;

        //If I comment out the above line of codeand don't fetch the courses from the service but from a new array it works.
        //this.courses = ["Course1", "Course2", "Course3"];
    }
}

Când rulez acest exemplu, cursurile nu se afișează și primesc următoarea eroare în consolă:

Clasa returnează pur și simplu un array de stringuri. Dacă înlocuiesc acel fetch cu un string[] codificat direct, totul funcționează și se afișează corect.

Nu sunt sigur dacă există o problemă cu clasa propriu-zisă sau cu injecția de dependență. Presupun că, deoarece se plânge de clasă și de linia 4, aceasta chiar instanțiază și folosește clasa.

Conform sugestiei lui @5313M, folosirea acestuia conduce la următoarele:

Totuși, văd că, având codul meu, primesc următoarea eroare: Funcția returnează string[] și variabila mea este string[]. De ce va exista acest conflict:

Răspuns #1

Schimbă-l în :

this.courses = courseService.getCourses();

Răspunsul #2

Vă rugăm să înlocuiți codul dumneavoastră cu cel de mai jos și să încercați:

 <li *ngFor='let course of courses'>
            {{ course }}
</li>
courses : string[];
this.courses = this.courseService.getCourses();