AngularJS: заменить шаблон элемента на фокус

0

У меня возникла следующая проблема: мой клиент хочет, чтобы моя угловая директива полностью меняла внешний вид. Это означает, что для меня мне нужно будет полностью заменить шаблон, когда пользователь нажмет этот элемент. Я не смог найти ответ в Интернете, поэтому решил спросить.

Я попытался передать шаблон "несфокусированный" в разделе шаблона директивы и связать с событием фокуса в ссылке следующим образом:

   post: function (scope, element, attrs) {

        element.bind('focus',function(event){
          element.html('<span..../span>');
          $compile(element)(scope);
        });
   }

Но он вызывает ошибку (входной шаблон "несфокусированный")

Uncaught Error: [$compile:multidir] Multiple directives 
[ngModel, ngModel] asking for 'ngModel' controller on: <input....

Решение должно быть совместимо с Angular 1.2, которое я должен использовать.

  • 1
    Я не знаю, насколько сложен ваш шаблон, но одним из возможных подходов было бы просто иметь один шаблон и использовать ng-if для изменения внешнего вида.
  • 0
    Я учел это, но есть небольшая проблема. Платформа проверки формы, которую я должен использовать, должна иметь элемент «input» в качестве корневого элемента каждой директивы значения формы в момент отправки формы. В случае <span ng-if ...> <input ...> </ input> </ span> будет ли вход или диапазон считаться корневым элементом?
Теги:
angularjs-directive
angularjs-templates

2 ответа

2
Лучший ответ

ng-if не будет отображать элемент вообще, если условие ложно. В вашем комментарии у вас есть вход, вложенный в диапазон, поэтому span является корневым элементом. Вы можете иметь как диапазон, так и ввод в качестве элементов верхнего уровня в своем шаблоне.

<input ng-if="focusCondition"/>
<span ng-if="!focusCondition"></span>

Тогда элемент, который отображается, должен быть корневым элементом.

0

Вы можете использовать директиву ng-switch и отображать только те шаблоны, которые должны отображаться в фокусе.

  • 0
    пожалуйста, добавьте больше объяснений к вашему ответу, чтобы QO знал, что именно делать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню