2017-06-30 73 views
2

我试图在另一个组件中使用某个组件的方法,但是我得到像xxComponent没有提供程序的错误。 我该怎么办?组件的调用方法Angular 2/4

import { FoldersService } from '../../_services/folders.service'; 
import { Component, OnInit, ViewChild } from '@angular/core'; 

@Component({ 
    selector: 'app-folder-create', 
    templateUrl: './folder-create.component.html', 
}) 
export class FolderCreateComponent implements OnInit { 
    constructor(
    private http: Http, 
    private folderService: FoldersService, 
) { } 

    ngOnInit() { } 

    saveFolder() { 

    } 
} 

-- Class FolderEditComponent 
    import { FolderCreateComponent } from '../folder-create/folder-create.component'; 
@Component({ 
    selector: 'app-folder-edit', 
    templateUrl: './folder-edit.component.html', 
    styleUrls: ['./folder-edit.component.css'], 
}) 
export class FolderEditComponent implements OnInit { 
    constructor(
    private http: Http, 
    private folderService: FoldersService, 
    private folderCreate: FolderCreateComponent 
) { } 

    ngOnInit() { } 

    // How can I do here for calling method saveFolder() of the component FolderCreateComponent 

    // I try this : 
    folderCreate.saveFolder(); // But I got error : ERROR Error: Uncaught (in promise): Error: No provider for FolderCreateComponent! 

} 

我如何在组件调用FolderEditComponent方法saveFolder()组件FolderCreateComponent的呢?

回答

2

情况下,1 - 当您要访问的子组件的方法,然后在父组件 -

@ViewChild(ChildComponent) childComponent: ChildComponent; 

childComponent.methodName(); 

案例2 - 当您想要访问父母方法 -

构造(@注入(forwardRef(()=>为父级))私人_parent:为父级){}

只使用this._parent.methodName()

+0

我添加了一个plnlr:https://plnkr.co/edit/c6lXPtyNFsCcPk0zyPnF?p = preview ..我无法解析.. – user1814879

+0

https://plnkr.co/edit/8HauRImuUsrWsizIcrM6?p=preview 更新plunker请看看这个。如果有任何问题准备协助你 –

+0

Yesss没关系.. Thxxx so muchhh – user1814879

1

您需要在组件中的服务添加到使用的供应商:

@Component({ 
    selector: 'app-folder-create', 
    templateUrl: './folder-create.component.html', 
    providers: [FoldersService] 
}) 

此外,您还需要以使用内另一个组件与import {FooComponent} from '/path/to/foo.component';导入的组件。

编辑:

import {FolderCreateComponent} from 'path/to/component'; 

export class FolderEditComponent implements OnInit { 

    constructor(private folderCreate: FolderCreateComponent) { 
    } 

    foo() { this.folderCreate.saveFolder(); } 
} 
+0

是的,但我想使用方法saveFolder在组件 'FolderEditComponent' ..而不是在服务 – user1814879

+0

然后按照我的第二个建议。 – pzaenger

+0

是的,我这样做,但同样的错误..我不知道他是如何工作的。 – user1814879

1

添加提供程序,如下图所示为FolderCreateComponent

import { FoldersService } from '../../_services/folders.service'; 
import { Component, OnInit, ViewChild } from '@angular/core'; 
import { Http, Response } from '@angular/http'; 

@Component({ 
    selector: 'app-folder-create', 
    templateUrl: './folder-create.component.html', 
    providers: [FoldersService] 
}) 
export class FolderCreateComponent implements OnInit { 
    constructor(
    private http: Http, 
    private folderService: FoldersService, 
) { } 

    ngOnInit() { } 

    saveFolder() { 

    } 
} 
+0

是的但我想在组件'FolderEditComponent'中使用saveFolder方法, ..而不是服务 – user1814879

+0

@ user1814879如上所示在'FolderCreateComponent'中添加'FolderService'提供程序并再次检查。 –

+0

是如果我不能使用组件方法,我认为我将使用服务 – user1814879