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你能解释一下我犯了什么错误吗?因为我需要导入的东西不多了。谢谢