Personalizando as diretivas ngTagsInput e autoComplete (AngularJS)

Eu sou novo no AngularJS e atualmente estou trabalhando em um campo de entrada, que pode aceitar várias tags por vez, juntamente com o recurso de preenchimento automático, que exibe as tags disponíveis como opções suspensas. Para isso, estou usando ongTagsInput diretiva que encontrei na web (http://mbenford.github.io/ngTagsInput/), que me fornece um elemento HTML personalizado<tags-input>. Isso funciona lindamente:

index.html:

<script>
var app = angular.module('plunker', ['ngTagsInput']);

app.controller('MainCtrl', function($scope, $http) {
  $scope.tags = [
    { text: 'Tag1' },
    { text: 'Tag2' },
    { text: 'Tag3' }
  ];

  $scope.loadTags = function(query) {
    return $http.get('tags.json');
  };
});
</script>
<div ng-app="plunker" ng-controller="MainCtrl">    
    <tags-input ng-model="tags" add-on-paste="true" display-property="text" placeholder="Add a Tag" add-from-autocomplete-only="true">
           <auto-complete max-results-to-show="4" min-length="2" source="loadTags($query)"></auto-complete>
    </tags-input>
</div>

tags.json:

[
  { "text": "Tag1" },
  { "text": "Tag2" },
  { "text": "Tag3" },
  { "text": "Tag4" },
  { "text": "Tag5" },
  { "text": "Tag6" },
  { "text": "Tag7" },
  { "text": "Tag8" },
  { "text": "Tag9" },
  { "text": "Tag10" }
]

No entanto, eu queria usar o HTML padrão<input> elemento em vez do personalizado<tags-input> elemento que acompanha a diretiva, com muita ajuda e usando<script src="https://code.jquery.com/jquery-3.1.0.js" integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk=" crossorigin="anonymous"></script> Consegui fazer aqui:

Aqui está o novoindex.html:

<script>
var app = angular.module('plunker', ['ngTagsInput']);

app.controller('MainCtrl', function($scope, $http) {
  $scope.tags = [
    { "id":1, "tagname": 'Tag1' },
    { "id":2, "tagname": 'Tag2' },
    { "id":3, "tagname": 'Tag3' },
    { "id":4, "tagname": 'Tag4' }
  ];

    $scope.loadTags = function(query) {
    return $http.get('tags.json');
  };

});

app.directive('tagsInputAttr', 
  function($compile){
    return {
      restrict: 'A',
      require: '?ngModel',
      scope:{
        ngModel: '='
      },
      link: function($scope, element, attrs, controller) {
        var attrsText = '';
        $.each($(element)[0].attributes, function(idx, attr) {
          if (attr.nodeName === "tags-input-attr" || attr.nodeName === "ng-model") 
            return;

          attrsText += " " + attr.nodeName + "='" + attr.nodeValue + "'";
        });

        var html ='<tags-input ng-model="ngModel" ' + attrsText + '></tags-input>';
        e =$compile(html)($scope);
        $(element).replaceWith(e);
      }
    };
  }
);
</script>
<div ng-app="plunker" ng-controller="MainCtrl">

    <input tags-input-attr ng-model="tags" add-on-paste="true" display-property="tagname" placeholder="Add tags here..." add-from-autocomplete-only="true">
      <auto-complete max-results-to-show="3" min-length="2" source="loadTags($query)"></auto-complete>
    </input>

  </div>

E o novotags.json:

[
  { "id":1, "tagname": "Tag1" },
  { "id":2, "tagname": "Tag2" },
  { "id":3, "tagname": "Tag3" },
  { "id":4, "tagname": "Tag4" },
  { "id":5, "tagname": "Tag5" },
  { "id":6, "tagname": "Tag6" },
  { "id":7, "tagname": "Tag7" },
  { "id":8, "tagname": "Tag8" },
  { "id":9, "tagname": "Tag9" },
  { "id":10, "tagname": "Tag10" }
]

Como você pode notar, a nova diretivatagsInputAttr, que envolve o<tags-input> fornece a mesma funcionalidade e pode ser usado dentro<input> como um atributo, juntamente com o restante dos atributos, comong-model, display-property etc. Portanto, não preciso usar o<tags-input> elemento diretamente. oproblema é esse o<auto-complete> colocado dentro do<input> tag não funciona.

Para isso, preciso alterar minha diretiva, considerando o seguinte:

Nota: Eu não quero usar o jquery para isso

Minha pergunta é como enrolar o<auto-complete> dentro do mesmo<input tags-input-attr> elemento:

Como um atributo dentro do mesmo<input tags-input-attr> elemento

ou como um atributo dentro de um elemento HTML padrão como<div> ou<span>embrulhado dentro da mesma<input tags-input-attr> elemento.

Se não os dois acima, então como último recurso, como o<auto-complete> etiqueta embrulhada dentro da mesma<input tags-input-attr> elemento

Toda ajuda é apreciada. Desde já, obrigado.

questionAnswers(1)

yourAnswerToTheQuestion