2016-04-26 19 views
0

私はFirebaseの電子メールのUIブートストラップモーダルウィンドウを作っています&パスワードログイン。モーダルウィンドウはユーザにログインし、authDataオブジェクトを返します。モーダルウィンドウが閉じます。その後、authDataオブジェクトは、ホームウィンドウまたはホームコントローラで使用できません。

モーダルウィンドウまたはそのコントローラが子を作成しているようです$scopeauthDataオブジェクトは、子の$ scopeでは利用できますが、親の$scopeでは利用できません。ここで

は、モーダルウィンドウを開くためのコードを実行home.htmlにあるボタンです:ここで

<button type="button" class="btn btn-info" ng-click="openModal('md')"> 
    E-mail &amp; password</button> 

は、モーダルウィンドウが開きますHomeController.jsのコードです:

$scope.openModal = function(size) { 
    var modalInstance = $uibModal.open({ 
     templateUrl: 'javascript/templates/emailLoginModalContent.html', 
     controller: 'EmailLoginModalInstanceCtrl', 
     scope: $scope, 
     size: size 
    }); 
    }; 

scope: $scopeと設定しています。私もscope: $parentを試しました。私は$scope.authData = authData;$scope.authData.uid = authData.uid;を試してみました

app.controller('EmailLoginModalInstanceCtrl', ['$scope', '$uibModalInstance', '$firebaseAuth', function($scope, $uibModalInstance, $firebaseAuth) { 
    console.log("EmailLoginModalInstanceCtrl controller."); 

    var ref = new Firebase("https://my-firebase.firebaseio.com/"); 
    $scope.authObj = $firebaseAuth(ref); 

    // Login user 

    $scope.loginUser = function(user) { 
     ref.authWithPassword({ 
     email: $scope.user.email, 
     password: $scope.user.password 
     }, function(error, authData) { 
     if (error) { 
      console.log("Login Failed!", error); 
     } else { 
      console.log("Authenticated successfully with payload:", authData); 
      $scope.authData = authData; 
      $scope.authData.uid = authData.uid; 
      console.log($scope.authData.uid); 
      $scope.reset(); 
      $scope.cancel(); 
      $scope.$apply(function() { 
      console.log("Applied!"); 
      }); 
     } 
     }); 
    }; 

    }]); 

注:ここでは

は、モーダルウィンドウのコントローラの一部です。 authDataオブジェクトを親の$ scopeに置くこともできません。

また、ホームコントローラから$getAuth()を実行しようとしました。それはauthDataオブジェクトを持っていて、それを親の$scopeに置きます。しかし、モーダルウィンドウが閉じたときに実行するホームコントローラのコードを取得できません。

提案がありますか?あなたはこのように、親コントローラ機能へのモーダルコントローラから値を渡すことができ

答えて

2

$scope.ok = function(){ 
    $uibModalInstance.close({ authData : authData}) 
    } 

注意、モーダルさん大丈夫ボタンは、モーダルコントローラの$scope.okng-click上を呼び出す必要があります。

親コントローラでは、$ uibModal.openはresultプロパティを含むオブジェクトを返します。

var modalInstance = $uibModal.open({ 
     templateUrl: 'javascript/templates/emailLoginModalContent.html', 
     controller: 'EmailLoginModalInstanceCtrl', 
     scope: $scope, 
     size: size 
    }) 
modalInstance.result.then(function(authData){ 
    console.log('printing authData - ', authData) 
}) 
+0

^これが方法です。 また、$ uibModal ...変数のスコープにアクセスするコールバック関数をモーダルインスタンスに渡すこともできます。これはniceを追加することで解決されます。 var callingFn = function(){//処理する}; VAR modalInstance = $ uibModal.open({ サイズ:サイズ、 templateUrl://..etc 解決:{passFn:!callingFn} – razblack

+0

正しい答え:-)さて、私は '' '近い(結果)を参照してください''で書かれています。ありがとう! –

関連する問題