2017-07-07 103 views
0

我试图调用从组件另一组件的功能。这是我的构造函数:角2 - 呼叫其他组件功能

constructor(
     private http: Http, 
     private appComponent: AppComponent 
     ) { 
     this.setUrl(); 
    } 

    setUrl() { 
     if (this.appComponent) { 
      this.Url = this.appComponent.getEnvironnement(); 
     } else { 
      setInterval(this.setUrl, 1000); 
     } 
    } 

然而,当我从我的appComponent试图财产/函数,我得到一个错误说:appComponent is undefined

为什么我的部分是不确定的,即使我在初始化开始?

+2

你只是试图注入AppComponent成子组件?我不知道你的目标是什么,但你可能不想这么做,但是要用“共同服务”来做。阅读上依赖注入:https://angular.io/guide/dependency-injection – TomTom

+1

另一个伟大的文档是https://angular.io/guide/component-interaction这是“角路”组件之间管理iteraction。无论如何,@TomTom是对的。另外,你不应该注入一个组件。 –

+0

我更新了我的代码。 –

回答

0

可以使用@Output其他组件的事件绑定。

不要使用@输入和@输出,而不是输入和输出,欲了解更多信息,您可以访问以下网址@Directive的性质@Component装饰

https://www.sitepoint.com/angular-2-components-inputs-outputs/

+0

通过使用从角型芯包进口{注射器}调用来自另一组件的方法和从喷射器使用GET方法。对不起,这不是更全面,但它肯定是我认为最好的方法之一 –

0

假设非应用程序组件是应用程序组件的子组件,您可以将数据从应用程序组件下载到子组件。这里我们有应用程序组件包含environmentUrl逻辑。然后将其保存为environmentUrl。然后传递给我的子组件的url属性。因此,不需要让子组件访问父组件的函数,而只需要将数据从父项传递给子项即可。

@Component({ 
    selector: 'my-app', 
    template: ` 
    <my-child [url]="environmentUrl"></my-child> 
    ` 
}) 
export class App { 
    environmentUrl: string; 

    constructor() { 
    this.environmentUrl = getEnvironment(); 
    } 

    getEnvironment() { 
    return '/some/url'; 
    } 
} 

@Component({ 
    selector: 'my-child', 
    template: ` 
    <div> 
     <h2>{{url}}</h2> 
    </div> 
    `, 
}) 
export class ChildComponent { 

    @Input() url: string; 

    constructor() { 
    } 
} 

这种方法的另一个优点是ChildComponent更具可重用性。 ChildComponent不知道有关父级方法的任何信息,可以在没有明确依赖父级组件的情况下使用。