AngularJS Firebase数据库按复选框更新字段

cpl*_*lus 8 angularjs firebase angular-ngmodel firebase-authentication firebase-realtime-database

我想在显示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;
            });
        }
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

目前它只更新当前用户,并且还维护所有用户的检查值,但不更新,只保留当前用户本身.

Jum*_*nco 2

这是因为您对数据库所做的任何更新都指的是当前用户,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>
Run Code Online (Sandbox Code Playgroud)

并在你的函数中接收 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;
        });
    }
Run Code Online (Sandbox Code Playgroud)