【问题标题】:Apply currency filter using angularjs and injecting $filter in function使用 angularjs 应用货币过滤器并在函数中注入 $filter
【发布时间】:2016-03-04 07:46:12
【问题描述】:

我有一个功能,我需要注入过滤器来过滤货币。 这是我的指示, module.exports = prAmountAutoCorrectingField;

function prAmountAutoCorrectingField($filter) {
    return {
        require: '?ngModel',
        restrict: 'A',
        link: link
    }

;

function link(scope, elm, attrs, ctrls) {
    if (!ctrls) return;
        ctrls.$formatters.unshift(function (a) {
            return $filter(attrs.format)(ctrls.$modelValue)
        });
        ctrls.$parsers.unshift(function (viewValue) {
            var plainNumber = viewValue.replace(/[^\d|\-+|\.+]/g, '');
            elm.val($filter(attrs.format)(plainNumber));
            return plainNumber;
        });
}
}

HTML 代码

我收到类似错误的错误:

[$injector:unpr] 未知提供者:undefinedFilterProvider

我需要关于如何在这里注入过滤器的帮助,所以它应该可以正常工作。

【问题讨论】:

    标签: angularjs angularjs-directive angularjs-filter


    【解决方案1】:

    这是说 attrs.format 未定义。所以这意味着您正在尝试将过滤器的名称直接传递给您的指令。

    我认为这不是一个好主意。最好有一个带有 2 个参数的自定义过滤器,即要格式化的数据和货币。

    如果你想保持 attrs.format 的方式,把你的 HTML 代码和视图的控制器链接起来,这样我们就可以检查出什么问题了。

    【讨论】:

    • 这是我的指令,我正在尝试在其中注入过滤器。我需要它是这样的。这是我的 HTML。
    • 那么链接函数中的 attrs.format 是什么?如果您使用 attrs.format,这意味着输入属性应该有一个 format="" in。如果您要获取 pr-amount-auto-correcting-field,那么它就是 attrs.prAmountAutoCorrectingField。此外,如果您想传递“货币”,请像这样 pr-amount-auto-correcting-field={{'currency'}}
    • 没问题,但是这个解决方案只有在 prAmountAutoCorrectingField 的值不会改变(比如改变货币)的情况下才有效,否则你需要在你的指令中使用一种数据绑定方式。
    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多