QA@IT

AngularJs ログアウト時の$scopeの処理。$scopeを初期化したい。

3078 PV

AngularJs(ionic)で会員制のサイトを作っています。
ログアウトするとトップページに戻るようにしていますが、どうしても最初にログインする時に入力したIDとパスワードがテキストボックスに残ってしまいます。$scopeをリセットするにはどうすれば良いのでしょう?
コントローラーの違いに問題があるのでしょうか?

どなたか教えていただけますと大変助かります。宜しくお願い致します。


---html----

 <ion-content ng-controller="topCtrl">   
      <form>
          <label class="item item-input">
          <span>ユーザーID</span>
          <input type="email" id="userid"  name="userid" ng-model="userid">
          </label>
          <label class="item item-input">
          <span>パスワード</span>
          <input type="number" id="password"  name="password" ng-model="password">
          </label>

      <button class="button" ng-click="Login()" >
      ログイン
      </button>
      </form>



<ion-nav-bar ng-controller="NaviCtrl">       
        <ion-nav-buttons>
          <span ng-click="logout()">ログアウト</span>
        </ion-nav-buttons>        
  </ion-nav-bar>


----js----

 app.controller('NavCtrl',function($scope,$state,$localStorage) {
     $scope.logout = function logout(){
            $location.path('/top');
            $localStorage.$reset(); 
            $scope.initial="";
            $scope.userid=$scope.initial;
            $scope.password=$scope.initial;
     };

 });

回答

コントローラが違うので、logout()内の$scopeの内容を変えてもtopCtrlの$scopeへは意味がありません。
Login()成功時にクリアするとか、useridやpasswordを別のプロバイダに持たせてそれをバインドすると実現できるでしょう。
(前者のほうが簡単ですかね)

編集 履歴 (0)
  • アドバイスありがとうございました。教えていただいたようにlogin()時にクリアすると見事実現できました。

    いつも感謝いたします。
    -

topCtrl内で処理すれば良いのかと

app.controller('topCtrl',function($scope,$state,$localStorage) {

$scope.userid = "";
$scope.password = "";

});

とやってみたのですが、これだとうまくいきませんでした。
理解できないところは少しありますが、少しずつ勉強してまいります。

編集 履歴 (0)
  • 私の回答にはできたとありましたが、結局できたのかできなかったのかがわからないんですが。2回目に表示されたときもそれが実行されることを期待したってことでしょうか。状態は維持されるのでtopCtrl内でそのようにしてもその代入が実行されるのは最初にion-contentの内容が表示される時だけですね。 -
  • わかりにくいことをして申し訳ございません。教えていただいた通りにやって期待した動作をいたしました。ありがとうございます。

    状態が維持される、ところがポイントですね。PHP感覚で試したことがうまくいかなかったという自分の反省です。失礼いたしました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。