angular - 类型“FacebookOriginal”不可分配给类型“Provider”(Ionic 5 - Facebook 离子原生)
问题描述
重新启动 ionic 应用程序后,我突然开始收到这些错误:
TS2322:类型“FacebookOriginal”不可分配给类型“提供者”。“FacebookOriginal”类型缺少“TypeProvider”类型的以下属性:应用、调用、绑定、原型等 5 个。
app.module
// More imports above
import {Facebook} from '@ionic-native/facebook/ngx'; <--- I triple checked that this is the correct import
@NgModule({
declarations: [
// List of components here
],
entryComponents: [],
imports: [
// List of modules here
],
providers: [
StatusBar,
SplashScreen,
IsLoggedInGuard,
FCM,
IsNotLoggedInGuard,
Facebook, // <----- Error here
{provide: RouteReuseStrategy, useClass: IonicRouteStrategy}
],
bootstrap: [AppComponent]
})
export class AppModule {
}
我在哪里注入参考:
'Facebook' 指的是一个值,但在这里被用作一种类型。您的意思是“typeof Facebook”吗?
login.component.ts
// More imports above
import {Facebook} from '@ionic-native/facebook/ngx';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.scss'],
})
export class LoginComponent implements OnInit {
public datosBasicos: Basicos;
public colores: Color = new Color();
constructor(
public loginService: SessionService,
private router: Router,
private fb: Facebook, // <----- Error here
private platform: Platform,
private colorService: ColorService,
public basicosService: BasicosService
) {
}
async ngOnInit() {
// this.autologinIfPreview();
await this.loginService.loginAnonimo();
this.colores = this.colorService.color;
this.datosBasicos = await this.basicosService.findDatosBasicos().pipe(first()).toPromise();
}
public async loginFacebook() {
const fbResponse = await this.fb.login(['public_profile', 'user_friends', 'email']).then(); // Because of previous error, this isn't working at all
await this.loginService.loginFacebook(fbResponse);
this.router.navigate(['/main/home']).then();
// await this.loginService.loginFacebook();
}
如果我添加“typeof Facebook”,则在运行时会出现此错误:
此构造函数与 Angular Dependency Injection 不兼容,因为它在参数列表索引 2 处的依赖项无效。如果依赖类型是像字符串这样的原始类型,或者如果此类的祖先缺少 Angular 装饰器,则可能会发生这种情况。
这个错误让我发疯,我之前能够实际构建离子应用程序并使用 Facebook 登录。我尝试重新安装插件和类型并更改它们的版本,但没有成功。
解决方案
Alright I got it!
Somewhere else in my application, I was using this:
session.service.ts
import {FacebookLoginResponse} from '@ionic-native/facebook'; // <--- Here!!! should be: '@ionic-native/facebook/ngx'
public async loginFacebook(facebookResponse: FacebookLoginResponse): Promise<User> {
if (facebookResponse) {
const facebookCredential = firebase.auth.FacebookAuthProvider.credential(facebookResponse.authResponse.accessToken);
const userCredential = await firebase.auth().signInWithCredential(facebookCredential);
return userCredential.user;
}
return null;
}
Hope this helps someone, this bug was a time waster
推荐阅读
- php - foreach 正在丢失对象的值
- angular - 有多少种方法可以提高角度性能?
- python - 使用 ImageField 对 Django ModelForm 进行单元测试,测试显示无效的表单
- c - 在 C 宏和转换方面需要帮助
- c# - 在 C# 中将 IByteBuffer 转换为字符串
- selenium - 如何在 Junit 中同时使用 Jmeter 和 Selenium Webdriver 运行 1000 个用户而不导致 PC 挂起?
- date - 如何使用没有数字偏移的默认区域格式化日期
- python - 将pymysql结果转换为对象
- javascript - 如何使用 ASP.NET MVC 将 javascript 图像文件发布到 ActionResult?
- android - 使用 AOSP 更改构建自定义 SDK