使用键入的角度浮动输入标签

我使用了这里的一种风格:http://tympanus.net/Development/TextInputEffects/index.html

要创建输入指令,请参阅plunker:https://plnkr.co/edit/wELJGgUUoiykcp402u1G?p=preview

这对于标准输入字段非常有用,但是,我正在努力工作,以锻炼Twitter的typeahead:https://github.com/twitter/typeahead.js/

问题 - 如何将我的浮动输入标签用于打字?

app.directive('floatInput', function($compile) {
  return {
    restrict: 'E',
    replace: true,
    transclude: true,
    scope: {
      elemTitle: '=elemTitle',
      elemtId: '=elemeId'
    },
    templateUrl: 'input-template.html',
    link: function(scope, elem, attrs) {
      var ngModelName = elem.attr('input-model');
      var inputElem = angular.element(elem[0].querySelector('input'));
      inputElem.attr('ng-model', ngModelName);

      $compile(inputElem)(scope);
      $compile(inputElem)(scope.$parent);

      var inputLabel = angular.element(elem[0].querySelector('label span'));
      inputLabel.attr('ng-class', '{'annimate-input' : '+ngModelName+'.length > 0}');
      $compile(inputLabel)(scope);
    },
    controller: function($scope) {
      $scope.title = $scope.elemTitle;
      $scope.inputId = $scope.elemId
    }
  }
})

HTML:

<div>
<span class="input input--juro">
    <input class="input__field input__field--juro" type="text" id="{{inputId}}" ng-model="tmp" />
    <label class="input__label input__label--juro" for="{{inputId}}">
    <span class="input__label-content input__label-content--juro">{{title}}</span>
  </label>
  </span>
</div>

我所知道的最简单的方法是在指令的link函数中初始化typeahead输入。 为了使用可用选项初始化typeahead,我会为该指令创建一个可选参数,并在提供列表时选择性地将输入初始化为一个typeahead输入。

下面是一个指令如何看起来的例子:

app.directive('floatInput', function($compile) {
  return {
    restrict: 'E',
    replace: true,
    transclude: true,
    scope: {
      elemTitle: '=elemTitle',
      elemtId: '=elemeId',
      typeaheadSrc: '=?typeaheadSrc'
    },
    templateUrl: 'input-template.html',
    link: function(scope, elem, attrs) {
      var inputElem = angular.element(elem[0].querySelector('input'));

      if(scope.typeaheadSrc && scope.typeaheadSrc.length > 0){
        var typeahead = jQuery(inputElem).typeahead({
          hint: true,
          highlight: true,
          minLength: 1
        }, {
          name: 'typeahead',
          source: substringMatcher(scope.typeaheadSrc)
        });
      }
    },
    controller: function($scope) {
      $scope.title = $scope.elemTitle;
      $scope.inputId = $scope.elemId
    }
  }
});
// from http://twitter.github.io/typeahead.js/examples/
var substringMatcher = function(strs) {
  return function findMatches(q, cb) {
    var matches= [],
        substrRegex = new RegExp(q, 'i');

    $.each(strs, function(i, str) {
      if (substrRegex.test(str)) {
        matches.push({value: str});
      }
    });

    cb(matches);
  };
};

我已经更新了你的运动员,以达到预期的效果:Plunker

链接地址: http://www.djcxy.com/p/92473.html

上一篇: Angular floating input label to use typeahead

下一篇: How to query an Elasticsearch index using Pyspark and Dataframes