Angular ng-model $ parsers / $ formatters不会动态更改

时间:2018-02-22 13:32:23

标签: angularjs angularjs-directive format angular-ngmodel

我有一个指令,它取ng-model值并将值转换为mm / inch单位取决于scope.unit ,可以通过用户选择更改

我更喜欢使用ngModel。$ formatters ngModel。$ parsers而不是chnage控制器中的值,因为这个更改只是视图(实际上控制器中的实际值是0.1mm单位)

这是指令:

(function () {
    angular.module('mainModule').directive("unitConverter", function () {

        return {
            restrict: "A",
            scope: {
                unit: '@'
            },
            require: "ngModel",
            link: function (scope, elem, attrs, ngModel) {//1-mm //0-inch

                ngModel.$parsers.push(function (value) {

                    if (parseInt(scope.unit) === 1) {
                        return (value * 10)
                    }
                    else {
                        return ((parseFloat(value) * 10) * 25.4);
                    }
                });
                ngModel.$formatters.push(function (value) {

                    if (parseInt(scope.unit) === 1) {
                        return parseFloat(value) / parseFloat(10)
                    }
                    else {
                        return ((parseFloat(value) / parseFloat(10)) / parseFloat(25.4));
                    }

                });
            }
        };
    });
})();

它工作正常,但当用户更改单位值(绑定到scope.unit)时 格式化程序/解析器没有再次运行,实际上它仍保留第一个scope.unit值。

我的问题:如何强制角度获取更新的scope.unit值并更新视图。

0 个答案:

没有答案