将模型绑定到文本框后调用事件 - Angular

时间:2015-08-03 19:34:56

标签: javascript angularjs angularjs-directive model-binding angular-data

我想为我的应用程序中的每个文本框(输入)实现类似binding-completed的事件。

这里我试图在onblur事件中的某些条件下添加CSS类。没关系。但是在将一些模型绑定到文本框之后,我不想执行相同的功能。

  var app = angular.module("main", []);

  var MainController = function($scope, $http) {
    $scope.message = "CSS Change";
  };
  app.directive('floatBox', ['$document', '$timeout', '$rootScope', function($document, $timeout, $rootScope) {
    return {
      restrict: 'A',
      scope: true,
      link: function(scope, element, attr) {
        //this is not for validation, this is just a sample for what I want to do.
        //Please don't suggest Angular validations.
        element.on('blur', function(event) {
          changeCSSClass(element);
        });

        function changeCSSClass(element) {
          if (element.val().length == 0) {
            element.addClass('red');
            element.removeClass('green');

          } else {
            element.addClass('green');
            element.removeClass('red');
          }
        }
      }
    };
  }]);

HTML:

<div ng-controller="MainController">
  <input float-box type="text" ng-model="message">
 </div>

CSS:

.red {
   border: 5px solid red;
}

.green {
   border: 5px solid green;
}

我想在我的文本框中输入一些值后调用changeCSSClass

请使用插件进行快速编辑:http://plnkr.co/edit/NTjcV4KDHRVZasoCJz6l?p=preview

基本问题: 当我从文本框中blur时,该事件会被罚款。但是我想在初始加载中显示颜色,即在将模态message绑定到文本框之后。这样我就可以获得文本框长度,并根据我可以设置css类

我不想在所有文本框中使用 ng-class 并使用范围,而是需要一个常见的实现。

1 个答案:

答案 0 :(得分:1)

您可以将数据绑定到指令,并使用$watch

<强>指令

(function(){

  function directive(){
    return {
      restrict: 'A',
      link: function(scope, element, attr) {
        //this is not for validation, this is just a sample for what I want to do.
        //Please don't suggest Angular validations

        scope.$watch(attr.ngModel, function(){
              changeCSSClass(element);
        });

        function changeCSSClass(data) {
          if (data.length == 0) {
            element.addClass('red');
            element.removeClass('green');
          } else {
            element.addClass('green');
            element.removeClass('red');
          }
        }
      }
    };
};

angular
  .module('app')
  .directive('floatBox', directive);


})();

<强> HTML

<input float-box type="text" ng-model="message">