javascript - Angular2 将组件方法导入另一个组件

标签 javascript angularjs angular auth0

我有一个 home 组件,需要调用 LoginComponent 方法 isLoggedIn() 来检查用户是否在 @CanActivate 中登录,如下所示

仅当用户登录并经过身份验证时,主页组件才应激活

HomeComponent.ts

import {Component, OnInit} from 'angular2/core';
import {AboutComponent} from "../about/AboutComponent";
import {ROUTER_DIRECTIVES} from "angular2/router";

import {LoginComponent} from '../login/LoginComponent'

@Component({
    selector: 'home',
/*    template: `
    <div>
    <div class="input">
        <label for="Name">Name</label>
        <input type="text" id="name" #name>
    </div>
    <button (click)="onGetAll(name.value)">GET Request
    </button>
    <p>Response: {{response}}</p>
    </div>
    <a [routerLink]="['../About']">link to About component</a>
    `,*/
    templateUrl: '../app/templates/dashboard.html',
    styleUrls: ['../app/assets/light-bootstrap-dashboard.css','../app/assets/demo.css','../app/assets/pe-icon-7-stroke.    css','../app/assets/bootstrap.min.css'],
    directives : [ROUTER_DIRECTIVES]
})

@CanActivate(() => LoginComponent.loggedIn())  //<-- This is not working 
export class HomeComponent implements OnInit {
    response: string;

    constructor() {}

    ngOnInit() {}

    onGetAll(name: string){
       console.log("Button clicked.. more code goes here " + name);  
    }
}    

LoginCompoent.ts

import {Component} from 'angular2/core';
import {Router, RouteConfig, ROUTER_DIRECTIVES} from 'angular2/router';
import {AuthHttp,AuthConfig, tokenNotExpired, AUTH_PROVIDERS} from 'angular2-jwt';

import {HomeComponent} from '../home/HomeComponent'
import {AboutComponent} from '../about/AboutComponent'
import {AuthService} from '../../services/AuthService'

declare var Auth0Lock;


@Component({
    selector: 'protected',
    template: '<router-outlet></router-outlet>',
    directives: [ROUTER_DIRECTIVES],
    providers: [AUTH_PROVIDERS,AuthService]
})

export class LoginComponent { 

  constructor(private auth: AuthService) {
      this.auth.login();
  }
  login() {
     this.auth.login();
  }

  logout() {
    this.auth.logout();
  }

  loggedIn() {
    return tokenNotExpired();
  }

}    

最佳答案

loggedIn 方法不是 static 方法,因此不会被调用,

话虽如此,理想情况下,要检查用户已登录状态,您应该调用服务。

服务应该告诉用户是否已登录,并且服务上应该有一个静态方法。

关于javascript - Angular2 将组件方法导入另一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37243795/

相关文章:

javascript - 计算复选框总数

javascript - 我正在使用 angularjs 路线。在日志页面插入数据后,我希望它在导航到日志列表页面时自动更新

javascript - 如何调试 ng-pattern

Angular:订阅后仍然没有获得值

angular - 如果用户从一个选项卡移动到另一个选项卡,如何重置/刷新 Angular Material 中的选项卡主体数据?

javascript - 无法解决 Javascript 中的简单任务

javascript - Angular 。如何不重复相同的功能

angular - 错误 : Permission denied to access property "rejection"

javascript - 如何在 javascript 中将拉丁数字转换为阿拉伯数字?

javascript - 将 HTML 表单转换为 Angular POST 请求