2017-02-27 107 views
1

私のangular2アプリケーションで次の問題が発生しています。関数宣言エラー - 予期しないトークンです。コンストラクタ、メソッド、アクセサまたはプロパティが予期されました

予期しないトークン。コンストラクタ、メソッド、アクセサまたはプロパティは、 が必要です。

私は次のプロジェクトに従った。

https://github.com/Vintharas/angular2-step-by-step-06-consuming-real-data-with-http/blob/master/app/people.service.ts

私は自分のコード内のエラーの上に取得していますなぜ私はわかりません。私は上のgithubのリンクで利用可能なコードに従ってコード化しました。以下の画面キャプチャは、エラーが表示されている場所を示します。

enter image description here

あなたが見ることができるように、キーワード機能は、IDEによって赤い下線が引かれています。私は実際に私のコードで構文の問題を見ることができません(私はJavaの背景から、これは私の最初の角度アプリです)

ここで何が間違っているのか、それを修正する方法を教えてください。

これは私の完全なコードです:活字体で

import { Http, Response, Headers } from '@angular/http'; 
import { Injectable } from '@angular/core'; 
import { Tender } from './models/Tender'; 
import { Observable } from 'rxjs/Rx'; 


@Injectable() 
export class TendersService { 

    private _endpointUrl: string = "http://127.0.0.1:8080/get-all"; 

    constructor(private _http: Http) { 
    } 

    getAllTenders(): Observable<Tender[]> { 

     console.log("get all tenders in service"); 

     let tenders = this._http 
      .get(this._endpointUrl) 
      .map(mapTenders) 
      .catch(handleError); 

     console.log('tenders.service.ts -> retrieved tenders = '+tenders); 
     return tenders; 
    } 

    function mapTenders(response: Response): Tender[] { 
     console.log('tender.service.ts -> mapTenders'); 
     return response.json().map(toTender); 
    } 

    function toTender(r: any): Tender { 
     console.log('tender.service.ts -> toTender'); 
     let tender = <Tender>({ 
      id: r.id, 
      name: r.name, 
      description: r.description, 
      category: r.category, 
      district: r.district, 
      town: r.town, 
      imageUrls: r.imageUrls, 
      referenceNumber: r.referenceNumber, 
      addresses: r.addresses, 
      telNos: r.telNos, 
      dateTimePosted: r.dateTimePosted, 
      lastUpdateOn: r.lastUpdateOn 
     }); 
     console.log('Parsed tender in service :', tender); 
     return tender; 
    } 


    function handleError(error: any) { 
     let errorMsg = error.message || `Yikes! There was was a problem with our hyperdrive device and we couldn't retrieve your data!` 
     console.error(errorMsg); 

     // throw an application level error 
     return Observable.throw(errorMsg); 
    } 

} 
+2

メッセージはそれをすべて言います。あなたの関数をクラスの中から宣言したり(例のように)、クラスのメソッドにします。 'this'にアクセスする必要がない場合は静的メソッドにすることができます。 –

+0

@JBNizetありがとうございます。ドン;私はそれを見ることができなかったことを知っている。しかし、そこには論理がありますか?私はクラス外の機能に精通していません。 Angular2ではメソッドと関数が同じではありませんか? – vigamage

+1

Angularはそれとは関係ありません。言語はTypeScriptと呼ばれます。その点で、EcmaScriptと同じルールに従います。いいえ、方法と機能は同じではありません。方法はこれに結びついています。静的メソッドは、定義されているクラスに結び付けられます。関数はクラスとは何の関係もありません。彼らは完全に独立しています。だから、彼らはなぜクラスで宣言されるべきですか? –

答えて

1

、クラスの外、またはクラスのプロパティ(および他のいくつかの場所で)として、メソッドの内部で関数を宣言ではなく、クラスの直接の子として。クラスの直接の子は、コンストラクタ、メソッド、アクセサまたはプロパティでなければなりません。

ここは例です。コンパイラは次の関数の宣言をすべて許可します。

class SomeClass { 

    foo = function() { }; 

    someMethod() { 

     function bar() { } 

    } 
} 

function baz() { } 

それはfiddling around with TypeScript playworking thru the offical JavaScript to TypeScript tutorial価値があります。

関連する問題