焦点之后更改输入将从角度js中的指令中删除

时间:2016-12-12 10:00:45

标签: javascript html angularjs

我只想在从特定元素中删除焦点后更改输入(仅使用指令)我不想使用ng-focusng-blur 例如 - 这里我想在焦点丢失时将文本更改为大写 文本框 我有一个文本框

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

现在,我的$解析器将在模型中输入的每个单词上更改输出 即在每个字母上它都会起火我想在我的范围发生变化后更改模型。

这是我的plunker

这个掠夺者有两个问题。

1)因为我在这里使用$ parser它会触发我不想要的每个单词输入,我希望它在我的文本框中丢失焦点时触发。

2)我的模型没有改变我的指示。

2 个答案:

答案 0 :(得分:1)

我尝试保存您的plunker但我没有权限,所以,就这样使用。

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

这里是plunker 1

答案 1 :(得分:0)

如果你想要模糊,请尝试这样的事情:

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

您想要的值应该在控制器/型号上(链接中的第4个参数)。我建议每次更新时将其分配给变量,然后您可以在el.bind(&#39;模糊&#39;)方法中访问该变量。