每次模型值更改时运行$ formatters

时间:2015-12-15 06:57:14

标签: angularjs angularjs-directive angularjs-scope angular-ui-router angularjs-ng-repeat

我使用$formatters属性来屏蔽文本框,用户可以在其中输入帐号。输入时的文本框应显示*而不是实际帐号。

但是使用$formatters并没有按预期工作,因为当用户运行应用程序时它只运行一次。一旦我们更改了模型值,就不会调用$formatters函数。每当模型值发生变化时,我们是否有任何解决方法来运行$formatters函数。

1 个答案:

答案 0 :(得分:1)

你可以在这里发布你的代码吗? 在我的头顶,我可以建议像这样的东西

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

      ngModel.$formatters.push(function(){

        var value = ngModel.$modelValue;
              var string ="";
              for(var i=0;i<(value.length);i++){
                string +="#";

              }
              return string
      })
        element.bind('keydown', function () {
            console.log(ngModel);
            scope.$apply(setAnotherValue);
        });
        function setAnotherValue() {
            var data = angular.copy(ngModel);
             var value = element.val();
              var string ="";
              for(var i=0;i<(value.length);i++){
                string +="#";

              }

              //element.val(string).trigger('input')

              // ngModel.$formatters.push(function(){
              //   return string
              // })

              ngModel.$viewValue = string;
              ngModel.$render();

              ngModel.$parsers.push(function(){
                return ngModel.$modelValue;
              })

        }
    }
};

});

link to plunkr 这不是完美的代码,将在几个小时内回家,同时你可以检查一下这是否有效?