2017-02-27 516 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背景,这是我的第一个Angular应用程序)

请指出我这里有什么问题以及如何纠正它。

这是我的完整代码:

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

相关问题