2016-12-12 3 views
0

Я просто хочу, чтобы изменить свой вклад после того, как фокус удаляется из конкретного элемента (используя директиву только), я не хочу использовать ng-focus и ng-blur Для например - Здесь я хочу чтобы изменить текст в верхний регистр, когда фокус теряется из текстового поля у меня есть один текстовое полеИзменения ввода после фокуса удаляются из директивы в угловом JS

<input type = "text" ng-model = "text" upper> 

Здесь верхняя моя директива

app.directive('upper', function() { 
    return { 
     require: 'ngModel', 
     link: function (scope, element, attr, ngModelCtrl) { 
      function fromUser(text) { 
       alert(text); 
       var transFormetInput = text; 
       transFormetInput = transFormetInput.toUpperCase(); 
       alert(transFormetInput); 
       return transFormetInput; 
      } 
      ngModelCtrl.$parsers.push(fromUser); 
     } 
    }; 
}); 

Теперь мой $ parser изменит мой вывод на каждое слово, входящее в модель , т.е. на каждой букве он загорится. Я хочу изменить модель после изменения области.

Вот мой plunker

Это plunker имеет две проблемы.

1) Как я использовал $ parser здесь, он стреляет на каждое слово, которое я не хочу, я хочу, чтобы он срабатывал, когда мой фокус потерялся из моего текстового поля.

2) моя модель не меняется с моей директивы.

+0

, если вам это нужно только для визуального эффекта, вы могли бы просто использовать CSS, например, .my-element: {text-transform: uppercase; }; .my-element: focus {text-transform: initial; } –

+0

Нет, я не хочу только визуального, –

ответ

1

Я пытаюсь сохранить ваш плункер, но у меня нет разрешений, поэтому просто используйте вот так.

app.directive('upper', function() { 
    return { 
    require: 'ngModel', 
    link: function(scope, element, attr) { 
     element.on('blur', function() { 
     element[0].value = element[0].value.toUpperCase(); 
     }); 
    } 
    }; 
}); 

здесь plunker https://plnkr.co/edit/jMo9VCThgjrVVu5CY1sp?p=preview

+0

Спасибо, что помогло, но безопасно использовать $ apply(); ? –

+0

На самом деле вам это не нужно в этом случае. Просто удалите его. Я обновил ответ –

0

Если вы хотите, размытость, попробовать что-то вроде этого:

link: (scope, el, attr, ctrl) => { 
    el.bind('blur',() => { 
    el.val(ctrl.yourInput.value); 
    }); 
} 

Ваше значение, которое вы хотите должны быть на контроллере/модели (четвёртая агд в ссылке). Я предлагаю назначить его переменной каждый раз, когда она будет обновлена, и затем вы сможете получить доступ к методу el.bind ('blur').

+0

Мое значение не обновляется, можете ли вы добавить плункер, используя мой плункер, и заставить его работать? –

Смежные вопросы