我在嘗試將注入式服務導入組件時遇到問題。嘗試我可能無法讓系統看到AuthenticationCallbackActivateGuard。找不到模塊'./components/login/authenticationcallbackactivateguard'
我使用的是Steve Sanderson's ASP.Net Core based Angular 2 template的修改版本。它在app.module中導入完全正確,但只要我嘗試在Login組件上拉它,它就再也找不到了。
app.module.ts
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { UniversalModule } from 'angular2-universal';
import { AppComponent } from './components/app/app.component'
import { NavMenuComponent } from './components/navmenu/navmenu.component';
import { HomeComponent } from './components/home/home.component';
import { FetchDataComponent } from './components/fetchdata/fetchdata.component';
import { CounterComponent } from './components/counter/counter.component';
import { LoginComponent } from './components/login/login.component';
import { AuthenticationCallbackActivateGuard } from './components/login/authenticationcallbackactivateguard';
@NgModule({
bootstrap: [AppComponent, AuthenticationCallbackActivateGuard ],
declarations: [
AppComponent,
NavMenuComponent,
CounterComponent,
FetchDataComponent,
AuthenticationCallbackActivateGuard,
LoginComponent,
HomeComponent
],
imports: [
UniversalModule, // Must be first import. This automatically imports BrowserModule, HttpModule, and JsonpModule too.
RouterModule.forRoot([
{ path: '', component: HomeComponent, canActivate: [AuthenticationCallbackActivateGuard] },
{ path: 'home', component: HomeComponent },
{ path: '#', component: LoginComponent},
{ path: 'counter', component: CounterComponent },
{ path: 'fetch-data', component: FetchDataComponent },
{ path: 'login', component: LoginComponent },
{ path: 'signin-auth0', component:HomeComponent },
{ path: '**', redirectTo: 'home' }
])
]
})
export class AppModule {
}
login.component.ts
import { Component } from '@angular/core';
import { tokenNotExpired, JwtHelper } from 'angular2-jwt';
import { AuthCallback } from './components/login/authenticationcallbackactivateguard'; //<-- Error is here
let Auth0Lock = require('auth0-lock').default;
let options = {
auth: {
redirect: true,
rememberLastLogin: true
},
languageDictionary: {
title: "Login"
},
theme: {
logo: 'http://www.sapientsoft.co.za/img/sapient-logo.png',
primaryColor: '#2E5EAC',
}
};
@Component({
selector: 'login',
template: require('./login.component.html'),
providers: []
})
//providers: [Auth]
export class LoginComponent {
constructor(authCallback: AuthCallback)
{
}
lock = new Auth0Lock('WnB39V8Rwss366sATm01HbVcWijm96Vd', 'sapientfranko.eu.auth0.com',options);
jwtHelper : JwtHelper = new JwtHelper();
login()
{
this.lock.show("authenticated", (authResult) => {
localStorage.setItem('profile', JSON.stringify(authResult.profile));
localStorage.setItem('id_token', authResult.idToken);
console.log(
this.jwtHelper.decodeToken(authResult.id_token),
this.jwtHelper.getTokenExpirationDate(authResult.id_token),
this.jwtHelper.isTokenExpired(authResult.id_token)
);
this.loggedIn();
});
}
logOut()
{
localStorage.removeItem('profile');
localStorage.removeItem('id_token');
this.loggedIn();
}
loggedIn()
{
return tokenNotExpired();
}
}
AuthenticationCallbackActivateGuard.ts
import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
import { Location } from '@angular/common';
@Injectable()
export class AuthenticationCallbackActivateGuard implements CanActivate {
constructor(private location: Location) { }
canActivate() {
// You may want to make a more robust check here
return this.location.path(true).indexOf("access_token") === -1;
}
}
我的文件夾結構
很有意義。我會給它一個鏡頭,讓你知道它是如何去 –
完美工作!謝謝 –
不客氣,很高興我能幫忙! :) – Alex