2016-03-03 41 views
1

Plunker:http://plnkr.co/UwPmy7火力地堡錯誤:3路綁定對象不同步

基本上,我在我的應用程序離子,我希望用戶能夠將信息輸入到文本框,然後有同步的信息有一個頁面基於其特定的用戶ID到Firebase數據庫。

我有2個工廠,生成認證令牌和分別用於用戶信息火力對象:

// Returns Firebase authenticator 
.factory('Auth', ['$firebaseAuth', 
    function($firebaseAuth) { 
    var ref = new Firebase('https://luminous-torch-5887.firebaseio.com/') 

    return $firebaseAuth(ref); 
    } 
]) 

// Returns information for specified user's sale 
.factory("UserSale", ["$firebaseObject", 
    function($firebaseObject) { 
     return function(userID) { 
      var ref = new Firebase('https://luminous-torch-5887.firebaseio.com/users/'); 
      var userSale = ref.child(userID); 

     return $firebaseObject(userSale); 
     } 
    } 
]); 

我的登錄和顯示選項卡都控制器開始與稍後用於登錄的認證令牌的生成:

// Manages user-related information 
.controller('AccountCtrl', ['$scope','Auth','$firebaseObject','UserSale', 
    function($scope, Auth, $firebaseObject, UserSale) { 

     // Create authenticator 
     $scope.auth = Auth; 

     // Set user's credentials when logged in 
     $scope.auth.$onAuth(function(authData) { 
      $scope.authData = authData; 
     }); 

    // More functions... 

這裏它也被我的登錄功能,當他們登錄3路,綁定了用戶的數據:

// AccountCtrl 

$scope.authWithPassword = function() { 
    Auth.$authWithPassword({ 

     // Retrieve user input 
     email: $scope.email, 
     password: $scope.password 

    }).then(function(authData) { 

     // When logged in, bind user data 
     UserSale(authData.uid).$bindTo($scope, 'userSale'); 

     console.log('Logged in as: ' + authData.uid); 

    }).catch(function(error) { 
     console.error('Authentication failed: ' + error); 
    }); 
}; 

的數據可以在HTML界面進行修改:

<ion-view view-title="Your Sale"> 
    <ion-content ng-controller="AccountCtrl"> 

     <!-- Show fields only when logged in --> 
     <div ng-show="authData"> 

      <label class='item item-input'> 
       <span class='input-label'>Title</span> 
       <input type='text' ng-model='userSale.title'> 
      </label> 

      <label class='item item-input'> 
       <span class='input-label'>Start Date</span> 
       <input type='date' ng-model='userSale.startDate'> 
      </label> 

      <!-- More data fields --> 

然而,似乎沒有任何當我改變字段中的數據的情況發生。我知道一個對象正在創建和修改,但不會將更改發佈到Firebase。我試過使用。$ save()操作,但這似乎沒有什麼區別。我也嘗試使用這個命令手動設置數據:

UserSale($scope.authData.uid).title = $scope.userSale.title; 

但是沒有結果寫入數據庫。

這裏是我的火力地堡安全規則:

{ 
    "rules": { 

     // Public read access 
     ".read": true, 

     // Users write to their own key 
     "users": { 
      "$uid": { 
       ".write": "auth != null && auth.uid == $uid" 
      } 
     } 
    } 
} 

我測試他們通過模擬器,一切都在那裏工作。我也嘗試過在沒有安全規則的情況下運行它,這似乎也沒有做任何事情。

感謝您的幫助! :)

+1

不需要初始化數據。你的代碼看起來正確。你的安全規則是什麼樣子的? –

+0

更新了我的安全規則! – neonfire999

+0

控制檯中是否有錯誤?您是否肯定用戶已通過身份驗證?我們可能需要查看您的控制器代碼。 –

回答

0

不,數據在同步數據之前不需要初始化。

您是否試過查看是否有logged onto firebase using command line

但是,您的代碼是正確的,所以我不擔心任何概念錯誤。

+0

我正在爲Ionic開發移動應用程序,所以我沒有託管。在我嘗試訪問數據之前,我已確認我已使用Firebase進行身份驗證。 – neonfire999