2017-11-28 17 views
0

私は角度の工場を使用して各コントローラが1ページ分のコントローラ間でデータを共有しています。ここに私のjsファイルは角度工場の問題

app.factory('myService', function() { 
    var savedData = {}; 
    function set(data) { 
     savedData = data; 
    } 
    function get() { 
     return savedData; 
    } 

    return { 
     set: set, 
     get: get 
    } 
}); 

app.controller("logincont", ['$scope','$http','md5','$window','myService',function($scope,$http,md5,$window,myService){ 
    $scope.cari = function() { 
     $http.get('http://localhost:8089/MonitoringAPI/webresources/login?a='+$scope.userid+'&d='+$scope.password).then(function(response){ 
      $scope.reslogin = response.data; 
      $scope.reslogin2 = response.data.username; 
      myService.set($scope.reslogin2); 
      console.log($scope.reslogin2); 
      console.log(myService.set($scope.reslogin2)); 
     }); 
    }; 
}]); 

app.controller("moncont", ['$scope','$http','$filter','myService',function($scope,$http,$filter,myService){ 
    $scope.user = myService.get(); 
    console.log($scope.user); 
}]); 

ですここで私は私が期待した結果 console.log($scope.reslogin2) = ristian console.log(myService.set($scope.reslogin2)) = undefined console.log($scope.user)={}

にconsole.logを呼び出し、ristianは、各スコープを充填した結果があります。

+0

プロンプトが解決しないときは、$ scope.userをログに記録します。これは、log $ scope.userのときにオブジェクトを取得する理由です。 – Akashii

+0

2番目のスコープはどうですか?なぜ私は定義されていない値ristianを得た。 –

+1

myService.set($ scope.reslogin2)は何も返されないので、未定義の場合はmyService.get()に変更してください – Akashii

答えて

0

ここには多くの問題がありますが、いくつかの点は既にコメントで取り上げられています。もう1つの問題は、set()関数がsavedDataオブジェクト参照をオーバーライドすることです。したがって、myService.get()と呼ぶと、空のオブジェクトへの参照が得られます。httpリクエストが解決され、setが呼び出されると、最初に割り当てたものは何でも、空のオブジェクトを参照します。

は、したがって、上記の例では、これは(あなたがある時点で$scope.cari()を呼び出すと仮定した場合)時系列に何が起こるかです:

  1. $scope.user = myService.get();はいくつかで$scope.user
  2. からsavedDataで空のオブジェクトへの参照を代入しますあなたがhttpリクエストをして、その呼び出しを行うと、myService.set($scope.reslogin2);
  3. setを呼び出すとsavedDataの参照が上書きされます。
  4. $scope.userは、依然として古い空のオブジェクトを参照します。

は、この特定の問題を修正するには、代わりに上書きそれを、あなたの全体の流れを再考、またはsavedDataオブジェクトを変異させるこの

function set(data) { 
    angular.extend(savedData, data); 
} 

ようsomethinkであなたのsetメソッドを交換するのいずれかが必要です。これにより、空のプロパティがオーバーライドされない他の問題が発生する可能性がありますが、それは完全にどのプロパティがdataにあるかによって異なります。

+0

ありがとうございます。どうもありがとうございます –