【问题标题】:angular directive ngModel change on blur角度指令ngModel改变模糊
【发布时间】:2016-06-07 02:27:02
【问题描述】:

我正在尝试创建仅在需要的情况下更新真实模型的指令。假设我只想在模糊时更新输入值。我添加了 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);
          });


        }
    }
});

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

【问题讨论】:

  • 正如我所说,我有一些情况需要更新过度事件的模型值,而不仅仅是模糊,也许我的问题标题不正确,抱歉 :)

标签: javascript angularjs


【解决方案1】:

您可能希望将模型作为属性绑定到指令:

//JavaScript

scope: {
    vm : '='
},

// HTML

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

现在您可以访问模型并在指令中以scope.vm 的方式对其进行操作。

我知道这不是您正在寻找的解决方案,但它可能会让您走上找到它的正确道路。

【讨论】:

  • 是的,我是通过将 vm 添加到 scope 来实现的
猜你喜欢
  • 2015-10-27
  • 2017-09-09
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多