[解決済み] イオン4オブザーバブル
2022-02-06 13:26:06
質問
Ionic 4のアップグレードプロジェクトでrxjs Observableパターンを実装しようとしていますが、うまくいきません。
これは古いやり方で、どこかで 'user:loggedIn' が使われています。 を使用して、×の結果を画面に表示しています。
events.subscribe('user:loggedIn', (userEventData) => {
this.getUserInfo(userEventData);
this.registerPushNotifications();
this.registerPushNotificationHandlers();
});
2つの方法を実装してテストしましたが、結果が表示されません。
方法1:
let userLoggedIn = new Observable((observer) => {
// const {next, error} = observer;
observer.next({'user:loggedIn':observer});
observer.complete();
});
userLoggedIn.subscribe((userEventData) => {
console.log(userEventData)
this.getUserInfo(userEventData);
this.registerPushNotifications();
this.registerPushNotificationHandlers();
});
方法2:
var observer: Observable<any> = of();
observer.subscribe(userEventData => {
this.getUserInfo(userEventData);
this.registerPushNotifications();
this.registerPushNotificationHandlers();
});
旧Ionicのイベントと同じ機能を持たせる方法はありますか? の機能は、Observable または Subject の実装を使用して、Ionic 4 で使用できますか?
どのように解決するのですか?
ここで、あなたに合うかもしれない一つのアプローチを紹介します。認証サービスにおいて、プライベートなBehaviorSubjectプロパティを作成し、プライベートなログインプロパティの最後の値を格納することができます。次に、BehaviorSubjectをソースとするpublic observableを作成することができます。最後に、あなたのページ/コンポーネントでサービスのpublic observableを購読し、ログインプロパティの状態に変更が生じたときに、必要なものを取得および設定することができます。以下は、どのように動作するかの簡単な例です。
loginService.ts
export class LoginService {
private login: boolean = false;
private loginSubject$ = new BehaviorSubject<boolean>(this.login);
loginChanged$ = this.loginSubject$.asObservable();
constructor() { }
updateLogin(){
this.login = !this.login;
this.loginSubject$.next(this.login);
}
}
home.page.ts
export class HomePage implements OnInit, OnDestroy {
timesClicked:number=0;
loginButtonText:string;
loginChangedSubscription: Subscription
constructor(private loginService: LoginService) {}
ngOnInit() {
this.loginChangedSubscription = this.loginService.loginChanged$.subscribe((loginValue)=>{
this.timesClicked += 1;
this.loginButtonText = (loginValue ? "Log Me Out" : "Log Me In");
})
}
ngOnDestroy(): void {
if (this.loginChangedSubscription) {
this.loginChangedSubscription.unsubscribe();
}
}
updateLogin():void{
this.loginService.updateLogin();
}
}
一応、動作していることを示すために ....
home.page.html
<ion-content>
<ion-item>
<ion-label>
{{timesClicked}}
</ion-label>
</ion-item>
<ion-button color="primary" (click)="updateLogin()">{{loginButtonText}}</ion-button>
</ion-content>
お役に立てれば幸いです。
関連
-
[解決済み】serveコマンドを使用するには、angular-cliプロジェクト内にいる必要があります。
-
[解決済み] node_modules が空になったので、`npm install`を実行する必要があるかもしれない。
-
[解決済み】アンギュラーコンポーネントにサービスを注入しようとするとエラー "EXCEPTION: Can't resolve all parameters for component"、なぜ?
-
[解決済み] テンプレートパースエラーです。'mat-icon' は既知の要素ではありません。
-
[解決済み] angularでpreflightのレスポンスがHTTP okステータスにならない
-
[解決済み] ウェブストーム Must be lvalue」の意味するところ
-
[解決済み] 安全でない値」の例外を発生させずに <iframe src="..."> を設定するにはどうしたらよいですか?
-
[解決済み] "エラーです。オーバーレイのプロバイダがありません!"
-
[解決済み] Angular2の素材ダイアログに問題あり - @NgModule.entryComponentsに追加しましたか?
-
[解決済み】PromiseとObservablesの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】angular 4アプリにReactiveFormsModuleを追加すると、NgControl用のプロバイダがないエラーが発生する。
-
[解決済み】Angularのエラーです。NgModuleアノテーションを追加してください。
-
[解決済み】アンギュラーコンポーネントにサービスを注入しようとするとエラー "EXCEPTION: Can't resolve all parameters for component"、なぜ?
-
[解決済み】本番モードを有効にするには?
-
[解決済み] Angular "未定義のプロパティ 'subscribe' を読み取ることができません".
-
[解決済み] 未定義のプロパティ 'filter' を読み取ることができません。
-
[解決済み] "エラーです。オーバーレイのプロバイダがありません!"
-
[解決済み] Angular2 Selectorが、ネストしたComponentのどの要素にもマッチしない。
-
[解決済み] Angular2: [(ngModel)] with [ngModelOptions]="{standalone: true}"を使って、モデルのプロパティへの参照にリンクさせる。
-
[解決済み] Angularアプリのシンタックスエラー。予期しないトークン <