8

Firebase 데이터베이스를 표시하는 테이블에서 데이터를 업데이트하려고합니다.AngularJS Firebase 데이터베이스에서 필드 업데이트 확인란

표의 각 줄은 특정 사용자의 데이터를 나타냅니다. 내 목표는 사용자 데이터의 한 필드에서 데이터를 업데이트 할 수있게하는 것입니다. 이 예에서는 확인란 ng-true-value="'admin'" ng-false-value="'user'"을 기반으로 사용자 역할을 변경하려고합니다.

정보를 편집/업데이트하고 업데이트 기능에 전달하는 행의 사용자 ID를 얻는 방법은 무엇입니까? 현재 코드는 현재 사용자 ID를 사용하고 있습니다.

나는 그것이 사용자 정보를 업데이트 사용하는 기능은 다음과 같습니다

$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로보기 :

<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> 

현재는 현재 사용자를 업데이트하고, 또한 모든 사용자에 대해 검사 값을 유지 업데이트 만하지는 않지만 현재 사용자 만 업데이트 할 수 있습니다.

답변

1

DatabaseRef.ref('users/' + myuser.uid).update(updated_user_info) 데이터베이스에서 수행하는 모든 업데이트의 현재 사용자를 언급하기 때문에 항상 동일한 사용자를 업데이트하고 있으므로 업데이트하려는 사용자의 ID를 가져와야합니다. 이 같은 : 당신이 오직 하나의 사용자를 업데이트하고 있기 때문에

<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> 

그리고 ID를받을 함수에서이

다른 답변에 명시된 바와 같이
$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

, 그것은이다. 이미 ng-repeat에서 'obj'로 업데이트하려는 사용자가 있으므로 업데이트하려는 사용자를 얻으려면 데이터베이스를 다시 호출 할 필요가 없습니다.

Firebase의 문서에서 : "currentUser 속성을 사용하여 현재 로그인 한 사용자를 얻을 수도 있습니다." 이 논리에 따라 현재 사용자는 항상 확인란을 편집하는 사용자가 될 것이므로 사용자가 직접 관리자를 만들지 못하게 할 것입니다. 내가 당신이라면

$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

내가 ng-click 대신 ng-change 지시어를 사용하는 것처럼

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

그리고 당신의 JS

가 보일 것입니다. ng-change 지시문은 확인란 값이 변경 될 때마다 트리거됩니다.

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

우리는 우리의 updateRole 기능에 사용자 모델을 전달하고 거기에서 나머지를 처리 ​​할 수있는 이상 당신은 HTML에서 볼 수 있듯이 HTML. 당신이 당신의 업데이트 기능을 볼 수 있듯이

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; 
    }); 

} 

이 조금 변경되었습니다. 이제 user 개체에서 uid을 가져 와서 계속 진행할 수 있습니다.