¿cómo hago para enviar parámetros que usan un ng-click?

publicado por: Anonymous

Tengo que un método que hace una llamada, me devuelve los datos que necesito, que son la descripción de unos privilegios, código (ejemplo: MS) y el valor que es true o false, el problema surge cuando quiero cambiar el estado de cada de los privilegios, no entiendo como enviar los datos que tengo en mi tabla porque al hacerlo me sale que no tan definidos.

Quiero aclarar que soy nuevo en Angularjs y no sé si parte de mi código está bien.

<section ng-controller="ObtenerPrivilegiosXUsuarioID">
<h1><strong>Usuario ID: {{UsuarioID}}</strong></h1>
<div class="table-responsive">
    <table class="table table-bordered table-striped">
        <tr>
            <td colspan="3" class="text-right">
                <h4 style="float:left">
                    <div class="input-group">
                        <input class="form-control" ng-model="q" placeholder="Filtrar" autofocus uppercase />
                        <span class="input-group-btn">
                            <button class="btn btn-default" ng-click="q=''" type="button"><i class="glyphicon glyphicon-remove"></i></button>
                        </span>
                    </div>
                </h4>
                <h4 style="float:right">
                    <a href="javascript:history.go(-1);" class="btn btn-primary btn-md"><i class="glyphicon glyphicon-chevron-left"></i> Volver</a>
                    <a class="btn btn-danger" href="/#/inicio"><i class="glyphicon glyphicon-remove"></i> Salir</a>
                </h4>
            </td>
        </tr>
        <tr>
            <th> Descripcion</th>
            <th> Valor</th>
            <th> Acciones</th>
        </tr>
        <tr ng-repeat="Privilegio in Privilegios |filter:q ">
            <td align="center"><span ng-bind="Privilegio.Descripcion" ng-model="Privilegio.Descripcion"></span></td>
            <td style="display:none"><span ng-bind="Privilegio.Codigo" ng-model="Privilegio.Codigo"></span></td>
            <td align="center"><input type="checkbox" ng-model="Privilegio.Valor" /></td>
            <td align="center">
                <button ng-disabled="Privilegio.Valor == true" class="btn btn-success" ng-click="darPrivilegio()" >Dar Privilegio</button>
                <button ng-disabled="Privilegio.Valor == false" class="btn btn-danger" ng-click="quitarPrivilegio()" >Quitar Privilegio</button>
            </td>
        </tr>
    </table>
</div>

    this.darPrivilegio = function (Codigo) {
        $scope.Privilegio.Codigo = Codigo;
        Consulta = {
            URL: webServiceUsuarios,
            Metodo: 'ActualizarPrivilegio',
            Parametros: {
                Token: obtenerToken(),
                UsuarioID: $routeParams.UsuarioID,
                'Codigo':$scope.Privilegio.Codigo,
                'Valor': true,                   
            },
        };       

        WSAPP.ConsultaSOAP(Consulta).then(function (response) {
            if (response.CodError == 0) {
                bootbox.alert("Se actualizaron los privilegios del Usuario ID <strong>" + $scope.UsuarioID + "</strong>", function () {
                    $route.reload();
                });
            } else {
                bootbox.alert($scope.datos.Errores[response.CodError]);
            }
            $.skylo('end');
        });
     }

    this.quitarPrivilegio = function (Codigo) {
        $scope.Privilegio.Codigo = Codigo;
        Consulta = {
            URL: webServiceUsuarios,
            Metodo: 'ActualizarPrivilegio',
            Parametros: {
                Token: obtenerToken(),
                UsuarioID: $routeParams.UsuarioID,
                'Codigo':$scope.Privilegio.Codigo,
                'Valor': false,                   
            },
        };       

        WSAPP.ConsultaSOAP(Consulta).then(function (response) {
            if (response.CodError == 0) {
                bootbox.alert("Se actualizaron los privilegios del Usuario ID <strong>" + $scope.UsuarioID + "</strong>", function () {
                    $route.reload();
                });
            } else {
                bootbox.alert($scope.datos.Errores[response.CodError]);
            }
            $.skylo('end');
        });
    }

solución

Deberías usar una sintaxis así, ya que los métodos esperan el parámetro Codigo

ng-click="darPrivilegio(Privilegio.Codigo)"

Por otro lado, donde pones

this.darPrivilegio = function (Codigo) {

deberías usar

$scope.darPrivilegio = function (Codigo) {

Dado que para usar this se usa otra sintaxis de Angular conocida como controller as pero como no puede combinarse con la sintaxias de controller por $scope, el método queda inaccesible para el markup.

Actualizacion

Viendo el codigo completo, (no puedo correrlo por que no tengo la API/usuario/clave), creo que el problema viene por que $scope.darPrivilegio y $scope.quitarPrivilegio estan definidos dentro del then de WSAPP.ConsultaSOAP(Consulta).

Te recomiendo que muevas ambos metodos fuera del callback y que los armes de la siguiente forma: (fijate en los comentarios en el codigo)

// usa $scope y recibe un parametro
$socpe.darPrivilegio = function (codigo) {
    Consulta = {
        URL: webServiceUsuarios,
        Metodo: 'ActualizarPrivilegio',
        Parametros: {
            Token: obtenerToken(),
            UsuarioID: $routeParams.UsuarioID,
            'Codigo': codigo, // no uses el $scope.Privilegios aqui, usa la el parametro de la funcion.
            'Valor': true,                   
        },
    };       

    WSAPP.ConsultaSOAP(Consulta).then(function (response) {
        if (response.CodError == 0) {
            bootbox.alert("Se actualizaron los privilegios del Usuario ID <strong>" + $scope.UsuarioID + "</strong>", function () {
                $route.reload();
            });
        } else {
            bootbox.alert($scope.datos.Errores[response.CodError]);
        }
        $.skylo('end');
    });
 } 

Luego invoca ambos pasandole el codigo que quieres usar en la solicitud WSAPP

<button ng-click="darPrivilegio(Privilegio.Codigo)" >Dar Privilegio</button>
<button ng-click="quitarPrivilegio(Privilegio.Codigo)" >Quitar Privilegio</button> 
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *