Angular 从另一个TS文件导入函数

Angular 从另一个TS文件导入函数,angular,ionic-framework,ionic3,Angular,Ionic Framework,Ionic3,我得到以下错误: ERROR TypeError: Cannot read property 'buttonToast' of undefined 当我试图从ionic项目中的另一个.ts文件导入buttonToast时。下面是我正在尝试的代码: firstfile.ts secondfile.ts 当我从some.html的按钮中单击函数alertCtrl时,我试图调用它。 有人能说出我在哪里犯的错误吗 将ToastProvider注入组件。另外,请确保ToastProvider已在AppM

我得到以下错误:

ERROR TypeError: Cannot read property 'buttonToast' of undefined
当我试图从ionic项目中的另一个.ts文件导入buttonToast时。下面是我正在尝试的代码:

firstfile.ts

secondfile.ts

当我从some.html的按钮中单击函数alertCtrl时,我试图调用它。 有人能说出我在哪里犯的错误吗

将ToastProvider注入组件。另外,请确保ToastProvider已在AppModule或使用它的模块的提供程序列表中注册:[]。 在angular 7中,您还可以创建可注入服务,并使用以下命令使其在root中可用:

@Injectable({
  providedIn: 'root',
})
并在构造函数中使用它:

 constructor(public navCtrl: NavController, public navParams: NavParams, public toastProvider: ToastProvider ) { }
export class SignupPage {

        constructor(toastCtrl: ToastProvider, public navCtrl: NavController, public navParams: NavParams) {
    }

    ionViewDidLoad() {
        console.log('ionViewDidLoad secondPage');
    }


    alertCtrl(){
        this.toastCtrl.buttonToast("Please sign in with your credentials");
    }
}
现在使用toasprovider.access

将ToastProvider注入组件。另外,请确保ToastProvider已在AppModule或使用它的模块的提供程序列表中注册:[]。 在angular 7中,您还可以创建可注入服务,并使用以下命令使其在root中可用:

@Injectable({
  providedIn: 'root',
})
并在构造函数中使用它:

 constructor(public navCtrl: NavController, public navParams: NavParams, public toastProvider: ToastProvider ) { }
export class SignupPage {

        constructor(toastCtrl: ToastProvider, public navCtrl: NavController, public navParams: NavParams) {
    }

    ionViewDidLoad() {
        console.log('ionViewDidLoad secondPage');
    }


    alertCtrl(){
        this.toastCtrl.buttonToast("Please sign in with your credentials");
    }
}
现在使用this.toasprovider访问它

在app.module中,添加提供商

注意:ToastProvider接受构造函数参数,因此我们需要一个工厂来创建该对象。它是app.module最后几行的一部分

额外进口:

import { ToastProvider } from '../pages/home/toast'
import { ToastController, ToastOptions } from 'ionic-angular';
模块定义:

@NgModule({
  declarations: [//no change
  ],
  imports: [//no change
  ],
  bootstrap: [IonicApp],
  entryComponents: [//nochange
  ],
  providers: [
    {provide: ErrorHandler, useClass: IonicErrorHandler}, {provide: ToastProvider, useFactory:ToastProviderFactory, deps:[ToastController ] }
  ]
})
export class AppModule {}
export function ToastProviderFactory(tc) {
  return new ToastProvider(tc, null);
}
在Home.ts页面或要使用服务/提供程序的位置,在构造函数中定义/注入到提供程序:

 constructor(public navCtrl: NavController, public navParams: NavParams, public toastProvider: ToastProvider ) { }
export class SignupPage {

        constructor(toastCtrl: ToastProvider, public navCtrl: NavController, public navParams: NavParams) {
    }

    ionViewDidLoad() {
        console.log('ionViewDidLoad secondPage');
    }


    alertCtrl(){
        this.toastCtrl.buttonToast("Please sign in with your credentials");
    }
}
测试在Stackblitz中工作。

在app.module中,添加提供者

注意:ToastProvider接受构造函数参数,因此我们需要一个工厂来创建该对象。它是app.module最后几行的一部分

额外进口:

import { ToastProvider } from '../pages/home/toast'
import { ToastController, ToastOptions } from 'ionic-angular';
模块定义:

@NgModule({
  declarations: [//no change
  ],
  imports: [//no change
  ],
  bootstrap: [IonicApp],
  entryComponents: [//nochange
  ],
  providers: [
    {provide: ErrorHandler, useClass: IonicErrorHandler}, {provide: ToastProvider, useFactory:ToastProviderFactory, deps:[ToastController ] }
  ]
})
export class AppModule {}
export function ToastProviderFactory(tc) {
  return new ToastProvider(tc, null);
}
在Home.ts页面或要使用服务/提供程序的位置,在构造函数中定义/注入到提供程序:

 constructor(public navCtrl: NavController, public navParams: NavParams, public toastProvider: ToastProvider ) { }
export class SignupPage {

        constructor(toastCtrl: ToastProvider, public navCtrl: NavController, public navParams: NavParams) {
    }

    ionViewDidLoad() {
        console.log('ionViewDidLoad secondPage');
    }


    alertCtrl(){
        this.toastCtrl.buttonToast("Please sign in with your credentials");
    }
}

测试在Stackblitz中工作。

我以前只做过这件事,但我得到了以下错误:错误:承诺中未捕获:错误:StaticInjectorErrorAppModule[Signupage->ToastProvider]:这称为依赖项注入,可以找到更多信息。@RiotZeastCaptain:更新了答案以将提供程序添加到app@Injectable{providedIn:'root',}我应该在哪里注入这个?它应该在你的服务中。:import{Injectable}from'@angular/core';@Injectable{providedIn:'root',}export class to-to-to-provider{我之前才这么做过,我得到了这个错误:error-error:Uncaught-in-promise:error:staticinjectorerrorappodule[signupage->to-to-provider]:这称为依赖项注入,可以找到更多信息。@RiotZeastCaptain:更新了答案以将提供程序添加到app@Injectable{providedIn:'root',}我应该在哪里注入这个?它应该在您的服务中。:import{Injectable}from'@angular/core';@Injectable{providedIn:'root',}export类到提供程序{这一个也没有解决,我只试过一次。我得到了一个错误:无法读取UndefinedCost的属性'ButtonSast'。你能创建一个stackblitz页面吗?这是URL:更新了答案。你的提供商正在接受参数,所以添加参数略有不同。谢谢,@Aragorn。你能解释一下我犯了什么错误吗?因为e我还需要导入一些其他东西。谢谢。这个问题也没有解决,我只是尝试了一下。我遇到了一个错误:无法读取未定义的属性'ButtonSast',你能创建一个stackblitz页面吗?以下是URL:更新了答案。你的提供商正在接受参数,所以添加参数略有不同。谢谢,@Arago你能解释一下我犯了什么错误吗?因为我需要导入的东西不多了。谢谢