簡體   English   中英

角度指令ngModel在模糊時更改

[英]angular directive ngModel change on blur

我正在嘗試創建僅在需要的情況下更新實際模型的指令。 假設我只想在模糊時更新輸入值。 我添加了canChange變量來檢查是否可以更新模型值,並且在模糊時將此變量設置為true。 我還想運行名為myChangeFn的自定義viewValue轉換。 我不知道為什么ctrl。$ setViewValue(ctrl。$ viewValue); 如果添加一些文本並模糊輸入,則不會觸發我的解析器。 我知道我可以使用ngModelOptions,但就我而言,它將不起作用,因為在某些情況下,我想在其他事件上更改模型值。

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);
          });


        }
    }
});

柱塞: https ://plnkr.co/edit/qrR6MgW0c6kUx71Hp17A p = preview

您可能希望將模型作為屬性綁定到指令:

// JavaScript

scope: {
    vm : '='
},

// HTML

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

現在,您可以訪問模型並在scope.vm指令中scope.vm

我知道這不是您要尋找的解決方案,但它可能會使您找到正確的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM