Búsqueda de sitios web

angular - Pasar una variable como parámetro en HTML


Estoy intentando llamar a una función que anula el campo clickeado,

si escribo (focus)="this.element.task=null", funciona, pero si hago (focus)="resetFields(this.element.task)", ¿hay alguna manera de lograr esto?

método resetFields:

resetFields(elm) {
    elm = NULL;
    this.submitted = false;
}

Ejemplo en Stackblitz: http://stackblitz.com/edit/angular-nvgtec

Respuesta #1

Javascript se pasa por valor, solo que para los objetos el valor es la referencia a ese objeto. Ve esta pregunta.

Entonces, la respuesta a tu pregunta original es no. No puedes modificar algo dentro de la función y ver los resultados fuera de la función, ya que los cambios son visibles en el ámbito actual de la función. Solo puedes enviar un objeto a esa función y modificar ese objeto.

resetFields(elm) {
    elm = NULL;  //won't work, will only set reference to elm to null inside resetFields function scope
    elm.someProperty = null; //will work
}

Sin embargo, podrías hacerlo así:

resetFields(elm, property) {
    elm[property] = null;
}

(focus)="resetFields(this.element, 'task')"

Demostración de stackblitz actualizada.

Respuesta #2

Si estás usando formularios reactivos entonces ...

this.form.reset(); // it will reset all data to blank 

Si estás usando ngModel entonces

<input name="name" [(ngModel)]="form.name" (focus)="resetData()">

resetData(){
   this.form = {};
}