2016-02-24 13 views
0

Я пытаюсь создать директиву, которая обновляет реальную модель только на необходимых случаях. Предположим, я хочу обновить значение ввода только при размытии. Я добавил переменную canChange, чтобы проверить, могу ли я обновить значение модели, и я установил эту переменную в true при размытии. Я также хочу запустить мое собственное преобразование viewValue с именем myChangeFn. Я не знаю, почему ctrl. $ SetViewValue (ctrl. $ ViewValue); не запускает мой парсер, если я добавляю текст и размытие ввода. Я знаю, что могу использовать ngModelOptions, но в моем случае это не сработает, потому что где-то, когда я хочу изменить значение модели на другие события.угловая директива ngModel change on blur

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function ($scope) { 

}).directive('changeOnBlur', function() { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     scope: {}, 
     link: function (scope, element, attrs, ctrl) { 

      var canChange = false; 

      ctrl.$parsers.push(function(value){ 
      var val = canChange ? myChangeFn(value) : ctrl.$modelValue; 
      canChange = false; 
      return val; 
      }); 

      function myChangeFn(value) { 
      return value + 'my custom data'; 
      } 

      element.on('blur', function() { 
      canChange = true; 
      ctrl.$setViewValue(ctrl.$viewValue); 
      }); 


     } 
    } 
}); 

Plunker: https://plnkr.co/edit/qrR6MgW0c6kUx71Hp17A?p=preview

+0

ng-model-options. – ryanyuyu

+0

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

ответ

1

Вы можете связать модель с директивой в качестве атрибута:

// JavaScript

scope: { 
    vm : '=' 
}, 

// HTML

<input ng-model="time" change-on-blur vm="time" /> 

Теперь вы можете получить доступ к модели и управлять ею, как вы хотите в директиве, как scope.vm.

Я знаю, что это не решение, которое вы ищете, но оно может привести вас к правильному пути к его поиску.

+0

Да, я реализовал его, добавив vm в область видимости –

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