2016-10-10 18 views
0

私はAngularJSの初心者です。私たちはページ間でデータを管理していますか? 1)私はユーザーがログインするアプリケーションを持っています。データベースはユーザーの詳細を返します。他のページでユーザーの詳細を使用する必要があります。他のページはログインページのサブセットではなく、つまり独自のスコープを持ちます。だから私は$ rootScope.user = userのようにrootScopeにユーザを保存すべきですか? rootScopeでそのようなデータをダンプすることは、良い習慣のようには見えません。より良い方法がありますか? 2)第2号は第1号に関連しています。ページ1のスコープ変数を監視するpage2に$ watchを追加したいのですが、どうすればいいですか?

+0

私の場合、私は常に、$ rootScopeまたは工場に自分のユーザー情報を**オブジェクト**として保存します。私はこれをベストプラクティスとみなすべきかどうかは確かではありませんが、私はこのようにして快適に感じます。 – choz

答えて

1

私はあなたの質問のためのアイデアをいくつ持っているFactoryを使用し、必要なログイン情報を保存し、

app.factory('AuthenticationService', [ '$location','$http', function($location,$http){ 
var currentUser; 
return { 
    login: function(username, password){ 
     var endPoint = "url"; 
     var jsonData = { 
      username: username, 
      password: password 
     }; 
     var jsonString = JSON.stringify(jsonData); 

     $http.post(endPoint, jsonString,{headers: {'Content-Type': 'application/json'}}).success(function (data,status, headers){ 

      if(data.access == "ok") 
      { 
       $location.path("learning"); 
      } 
      else 
      { 
       $location.path("error"); 
      } 

     }); 
    }, 
    logout: function(){}, 
    isLoggedIn: function(){}, 
    curUser: function(){return currentUser} 
}; 
} 

DEMO

1

:あなたは、使用クッキーの代わりにrooScope)

1 LocalStorageを使用することもできます(注意深く使用するとすべてのエクスプローラで機能しません)

2)エミッタを探していますここのリスナーは良い説明ですhttps://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/

幸運です。

+0

あなたのものは創造的ですが、最高のパクトではありません。データを共有する必要がある場合、サービスおよびファクトリはAngularで使用するものです。 – JanisP

+0

Sajeetharanの答えが私のシナリオに最も適していました。前述のとおり、アプリケーションはユーザーの操作に基づいてデータベースからデータを取得し、取得した情報を複数のページで使用する必要があります。工場を使うことが私たちにとって最高の解決策でした。さらに、services.jsにAuthenticationServiceを作成し、それを必要とするページに依存関係として追加しました。 – DavidC

+0

app.controller( "Controller"、 "$ scope"、 'AuthenticationService'、function($ scope、AuthenticationService ){}); – DavidC

関連する問題