8

Verileri Firebase veritabanını görüntüleyen bir tabloda güncelleştirmek istiyorum.AngularJS Firebase veritabanı bir alanı onay kutusunu işaretleyerek güncelle

Tablodaki her satır belirli bir kullanıcının verilerini temsil eder. Amacım, verileri bir kullanıcı verisinin bir alanında güncelleyebilmektir. Bu örnekte, kullanıcı rolünü ng-true-value="'admin'" ng-false-value="'user'" onay kutusuna dayanarak değiştirmeye çalışıyorum.

Bilgileri düzenlerken/güncelleştirirken ve güncelleştirme işlevine ilettiğim hattın kullanıcı kimliğini nasıl edinebilirim? şu anda kod geçerli kullanıcı kimliğini alıyor.

Ben kullanıcı bilgi güncelleme kullanmak fonksiyonudur:

$scope.updateRole= function() { 

      var updated_user_info= { 
       role: $scope.user.role 

      }; 
      var myuser = firebase.auth().currentUser;//change this part?! 
      DatabaseRef.ref('users/' + myuser.uid).update(updated_user_info) 
       .then(function() { 
        console.log("update success"); 
       }).catch(function (error) { 
       $scope.errMsg = true; 
       $scope.errorMessage = error.message; 
      }); 
     } 

html görünümü:

<tr ng-repeat="obj in $data"> 
    <td data-title="'First Name'" filter="{ 'First Name': 'text' }" sortable="'firstName'">{{ obj.firstName }}</td> 
    <td data-title="'Last Name'" filter="{ 'Last Name': 'text' }" sortable="'lastName'">{{ obj.lastName }}</td> 
    <td data-title="'Role'" filter="{ 'Role': 'text' }" sortable="'role'"> 
     <input type="checkbox" ng-model="user.role" ng-true-value="'admin'" ng-false-value="'user'" ng-click="updateRole()"> 
     {{obj.role}} 
    </td> 
</tr> 

anda yalnızca geçerli kullanıcı güncelliyor ve ayrıca tüm kullanıcılar için kontrol değerinin korunmasına ama güncel değil, sadece mevcut kullanıcının kendisi.

cevap

1

Geçerli kullanıcı için DatabaseRef.ref('users/' + myuser.uid).update(updated_user_info) numaralı veritabanına yaptığınız herhangi bir güncellemeden bahsediyor olmanızın nedeni, aynı kullanıcıyı her zaman güncellemenizdir, güncellemek istediğiniz kullanıcının kimliğini almanız gerekir. Böyle bir şey: Sadece hiç bir kullanıcıyı güncelliyoruz çünkü

<td data-title="'Role'" filter="{ 'Role': 'text' }" sortable="'role'"> 
    <input type="checkbox" ng-model="user.role" ng-true-value="'admin'" ng-false-value="'user'" ng-click="updateRole(obj.uid)"> 
    {{obj.role}} 
</td> 

Ve id almak Fonksiyonunuzda

başka cevap da belirtildiği üzere
$scope.updateRole= function (userid) { 

     var updated_user_info= { 
      role: $scope.user.role 

     }; 
     DatabaseRef.ref('users/' + userid).update(updated_user_info) 
      .then(function() { 
       console.log("update success"); 
      }).catch(function (error) { 
      $scope.errMsg = true; 
      $scope.errorMessage = error.message; 
     }); 
    } 
1

, bu kadar. Ng-yinelemenizden 'obj' ile güncellemek istediğiniz kullanıcıya zaten sahipsiniz, böylece güncellemek istediğiniz kullanıcıyı almak için veritabanını tekrar aramanıza gerek kalmaz.

Firebase'in belgelerinden: "Şu anda oturum açmış olan kullanıcıyı currentUser özelliğini kullanarak da alabilirsiniz." Bu mantıkla, geçerli kullanıcı her zaman onay kutusunu düzenleyen kişi olacaktır ve eminim ki kullanıcıların kendilerine yönetici olmalarını istemezsiniz. i idiyse

$scope.updateRole = function(userId) { 
    var updated_user_info= { 
      role: $scope.user.role 

     }; 

     DatabaseRef.ref('users/' + userId).update(updated_user_info) 
      .then(function() { 
       console.log("update success"); 
      }).catch(function (error) { 
      $scope.errMsg = true; 
      $scope.errorMessage = error.message; 
     }); 
    } 
} 
3

i ng-click yerine ng-change direktifini kullanır gibi

<input type="checkbox" ng-model="user.role" 
ng-true-value="'admin'" ng-false-value="'user'" ng-click="updateRole(obj.uid)"> 

Ve js

bakmak gerekir. Onay kutusu değeri her değiştiğinde ng-change yönergesi tetiklenir.

<input type="checkbox" ng-model="user.role" ng-change="updateRole(user)" ng-true-value="'admin'" ng-false-value="'user'"> 

bizim updateRole işlevine kullanıcı modelini geçmek ve oradan geri kalanını işleyebilir Yukarıdaki HTML görebileceğiniz gibi, HTML. Eğer güncelleme fonksiyonunu görebileceğiniz gibi

JS

$scope.updateRole= function (user) { 
    var updated_user_info= { 
     role: user.role 
    }; 

    DatabaseRef.ref('users/' + user.uid).update(updated_user_info) 
     .then(function() { 
      console.log("update success"); 
     }).catch(function (error) { 
     $scope.errMsg = true; 
     $scope.errorMessage = error.message; 
    }); 

} 

biraz değişti. Şimdi uid'u user nesnesinden alabilir ve devam edebilirsiniz.