2016-08-05 170 views
2

我开始学习Angular2,但..我想在我的成分,它创建一个服务和进口的,但我得到这个错误:Angular2:注射服务

error TS2339: Property 'commentService' does not exist on type 'CommentsComponent'.

comment.service.ts

import { Injectable } from '@angular/core'; 


@Injectable() 
export class CommentService { 
    testfunction() { 
     return 'valoare'; 
    } 
} 

comments.component.ts

import { Component, OnInit } from '@angular/core'; 
import { CommentService } from '../services/comment.service'; 

@Component({ 
    template: 'dadada', 
    providers: [CommentService] 
}) 

export class CommentsComponent implements OnInit { 
    construct(commentService: CommentService) { 
    } 

    ngOnInit() { 
     console.log(this.commentService.testfunction()); 
    } 
} 

app.component.ts

import { Component } from '@angular/core'; 
import { ROUTER_DIRECTIVES } from '@angular/router'; 

@Component({ 
    selector: '[web-application]', 
    templateUrl: 'template/home', 
    directives: [ROUTER_DIRECTIVES] 
}) 
export class AppComponent { } 

app.routes.ts

import { provideRouter, RouterConfig } from '@angular/router'; 
import { CommentsComponent } from './components/comments.component'; 
import { HomeComponent } from './components/home.component'; 

const routes: RouterConfig = [ 
    { path: '', component: HomeComponent }, 
    { path: 'comments', component: CommentsComponent } 
]; 

export const appRouterProviders = [ 
    provideRouter(routes) 
]; 

main.ts

import { bootstrap } from '@angular/platform-browser-dynamic'; 
import { AppComponent } from './components/app.component'; 
import { appRouterProviders } from './app.routes'; 
import { CommentService } from './services/comment.service' 

bootstrap(AppComponent, [ 
    appRouterProviders, 
    CommentService 
]) 
.catch(err => console.error(err)); 

有人有一个想法,为什么我可以”注入服务?

回答

6
export class CommentsComponent implements OnInit { 
    construct(commentService: CommentService) { 

应该

export class CommentsComponent implements OnInit { 
    constructor(private /* or public */ commentService: CommentService) { 

添加privatepublic使它成为一个实例属性,否则它只是一个参数。

+0

我已经尝试过了,但我得到了这个:参数属性只允许在构造函数实现中。 –

+0

我明白了。这听起来很合理。虽然;构造函数应该被命名为'constructor'而不是'construct'' –

+0

Lol同样的问题。我在“构造函数”一词中出现语法错误:D – codepleb

1

你应该当你注入一个依赖时提供访问修饰符。 使用此

export class CommentsComponent implements OnInit { 
    constructor(private commentService: CommentService) { 
} 
0

使私人

此参数可以解决问题

@Component({ 
    template: 'dadada', 
    providers: [CommentService] 
}) 

export class CommentsComponent implements OnInit { 
    constructor(private _commentService: CommentService) { 

    } 

    ngOnInit() { 
     console.log(this._commentService.testfunction()); 
    } 
} 

你可以离开下划线,它只是一个私有变量约定。