2016-05-21 6 views
0

Angular2-Meteorを使用して簡単なログイン画面を設計しています。ログインAPI呼び出しが成功すると、ユーザーを/ dashboardにリダイレクトします。Meter.call()メソッドでAngular 2 routerにアクセスする方法

import {Component} from '@angular/core'; 
import {MeteorComponent} from 'angular2-meteor'; 
import {LocalStorageService} from '../services/localstorage.service' 
import {Router} from '@angular/router-deprecated'; 
import {LoggerService} from "../services/loggerService"; 

'use strict'; 
@Component({ 
    selector: 'login', 
    templateUrl: 'client/login/login.html', 
    bindings: [LoggerService] 
}) 

export class LoginComponent extends MeteorComponent { 

public loginData = { 
    username: '', 
    password: '' 
}; 

constructor(private _logger:LoggerService, public router:Router) { 
    super(); 
} 

login() { 
    this._logger.log('Login attempted ', this.loginData); 

    this.call('authenticateUser', this.loginData.username, this.loginData.password , function (err, data) { 
     if (err) { 
      this._logger.error(err); 

     } else { 

      console.info(JSON.parse(data)); 
      console.log(this.router); 
      this.router.navigate(['Dashboard']) 
     } 
     }); 
    } 
} 

Meteor.call()でルータにアクセスできません。 私はself = thisを実行してへの参照をthisに渡そうとしましたが、selfとしてWindowが必要です。

誰か助けてもらえますか? ありがとうございます。

答えて

3

クラス内で同じthisコンテキストを使用するには、矢印機能を使用する必要があります。

このようなあなたの匿名のコールバック関数に変更し

:代わりにコールバック関数

2

を使用してのpromisesまたはobservablesに見てみてくださいあなたのに関数をバインドすることができ

this.call('authenticateUser', 
      this.loginData.username, 
      this.loginData.password, 
      (err, data) => { 
    //... 
}); 

ヒント

をこのような文脈:

this.call('authenticateUser', this.loginData.username, this.loginData.password , function (err, data) { 
    if (err) { 
     this._logger.error(err); 

    } else { 

     console.info(JSON.parse(data)); 
     console.log(this.router); 
     this.router.navigate(['Dashboard']) 
    } 
    }).bind(this); 

矢印の機能を使用することもできます。

this.call('authenticateUser', this.loginData.username, this.loginData.password , (err, data) => { 
    if (err) { 
     this._logger.error(err); 

    } else { 
     console.info(JSON.parse(data)); 
     console.log(this.router); 
     this.router.navigate(['Dashboard']) 
    } 
}).bind(this); 
関連する問題