2017-08-22 12 views
1

Observable.create()ステートメント内からクラス変数を設定する際に問題が発生しました。変数は未定義のままです。 (これは問題ではありませんが、これはイオンフレームワークを使用しています)。私が呼んでいるobservable.create()内からクラス変数を設定する

@Injectable() 
export class AuthenticationService { 
    currentUser: User; 

    login(email, password): Observable<boolean> { 
     return Observable.create(function(observer) { 
      var loggedIn = true; //Do call to login service 

      if(loggedIn) { 
       this.currentUser = new User("Test_Fname", "Test_Lname"); 
      } 

      observer.next(loggedIn); 
      observer.complete();   
     }); 
    } 
} 

コントローラー(:AuthenticationServiceは...一度app.module.tsで(私はcurrentUser変数を設定しようとしている)

注射クラス「を注入」されますlogin関数):

import { AuthenticationServiceProvider, Credentials } from '../../providers/authentication-service/authentication-service'; 

@Component({ 
    selector: 'page-login', 
    templateUrl: 'login.html', 
}) 
export class LoginPage { 
    constructor(private authService: AuthenticationServiceProvider) { 

    } 

    login() { 
    this.authService.login("[email protected]", "password123!") 
    .subscribe(authenticated => { 
     if(authenticated) { 
      console.log("Logged in!");   
      console.log(this.authService.currentUser); // UNDEFINED!!! 
     } else { 
      console.log("Login failed!"); 
     } 
     } 
    ); 
    } 
} 

「ログインしました!コンソールメッセージですが、currentUserはまだ未定義です。 Observable.create()の外側からcurrentUserを設定すると、正常に動作します。私はそれを間違っているのですか?

ありがとうございました。

+1

'[angularjs]'!= '[angular]'。タグには注意してください! ;-) – Mistalis

+0

[コールバック内の正しい\ 'this \ 'にアクセスするにはどうすればいいですか?](https://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside- aコールバック) – n00dl3

答えて

0

矢印機能=>を使用してください。 functionキーワードを使用すると、thisにアクセスできなくなります。コードを以下のように変更してください。

login(email, password): Observable<boolean> { 
    return Observable.create(observer => { 
     var loggedIn = true; //Do call to login service 

     if(loggedIn) { 
      this.currentUser = new User("Test_Fname", "Test_Lname"); 
     } 

     observer.next(loggedIn); 
     observer.complete();   
    }); 
} 
関連する問題