Uso angularjs y he creado un campo de entrada normal como este:

<input type="text" style="border: none" ng-model="model" >

Quiero hacer lo siguiente:

Si alguien hace clic en el campo de entrada, quiero llamar, por ejemplo, el método A. Luego escribe texto en este campo y si la persona hace clic en algún lugar de mi página para que el campo de entrada ya no esté enfocado, debería llamar al método B. ¿Es esto posible? con angularjs? En caso afirmativo, ¿cómo puedo hacer eso? ng-focus solo está activo en el evento de entrada pero no en la salida.

Quiero bloquear algo con esto, el método A establece solo un valor en verdadero y el método B establece el mismo valor en falso. pero debo saber cuándo el campo de entrada está activo y cuándo no.

35
user2115378 3 sep. 2014 a las 02:06

3 respuestas

La mejor respuesta

Estás mirando ng-focus y ng-blur.

<input type="text" style="border: none" ng-model="model" ng-focus="A()" ng-blur="B()">

En una nota al margen, use clases css en lugar de estilos en línea .. :)

O simplemente llame al mismo método con argumento y establezca el valor acc: -

 <input type="text" style="border: none" ng-model="model" ng-focus="A(true)" ng-blur="A(false)">
54
PSL 2 sep. 2014 a las 22:20

Puede vincular el método B a la directiva ng-blur de angular para detectar cuándo una entrada pierde el foco

<input type='text' ng-focus='methodA()' ng-blur='methodB()' ng-model='model'>
3
Brian 2 sep. 2014 a las 22:13

Si está utilizando la funcionalidad que desea aplicar a los campos en toda su aplicación, puede ponerla en una directiva. Aquí hay un ejemplo que agrega y elimina una clase CSS basada en el enfoque o desenfoque de un campo:

angular.module('myApp').directive('inputFocus', function () {

var FOCUS_CLASS = 'input-focused';
return {
  restrict: 'A',
  priority: 1,
  require: 'ngModel',
  link: function (scope, element, attrs, ctrl) {
    element.bind('focus',function () {
      element.parent().addClass(FOCUS_CLASS);    
    }).bind('blur', function () {
      element.parent().removeClass(FOCUS_CLASS);
    });
  }
};
});
5
Leo Farmer 2 sep. 2014 a las 23:53