ng-Repeat 在 1.3.x 但在 1.2.1 中不使用 Custom ValueFilter (Value | customFilter)

ng-Repeat not working with Custom ValueFilter (Value | customFilter) in 1.3.x but in 1.2.1

我正在尝试将解决方案从 1.2.1 更新到 1.3.15,但我卡住了,似乎摘要循环 运行 通过循环的方式发生了变化。

我有一个工厂,它为我的所有控制器保存数据,它有一个对象列表和一个当前对象 属性。它用于货币转换。

然后我得到了一个可以放在数字值上的过滤器。它引用工厂并使用当前 属性 获取转换率并修改输出。

价值=1000;当前 = kiloCurrency = 1000 => {值 | bvcurrency} 输出:1;

有一个更改当前货币的功能,过滤器应该更新 output.This 在 1.2.1 中工作正常但在 1.3.x 我有一些例子:
不工作 1.3.15:http://jsfiddle.net/dabii/mqkj4td9/7/
工作:1.2.1:http://jsfiddle.net/dabii/mqkj4td9/8/

app.factory("numberSvc", [function () {
    return {
        Formats: [{
        Display: "LC",
        Multiply: 1
    }, {
        Display: "kLC",
        Multiply: 1000
    }, {
        Display: "MLC",
        Multiply: 1000000
    }],
    Current: {
        Display: "kLC",
        Multiply: 1000

    }, 
    AddCurrency:function(curr){
        this.Formats.push(curr); 
    },
    SetCurrent: function(format){
        this.Current = format; 
    }
};
}]);

app.filter('bvcurrency', ['$filter', 'numberSvc', function ($filter, numberSvc) {
    return function (input) {
        var multi = numberSvc.Current.Multiply,
        ret = ( !! input || input === 0) && angular.isNumber(parseFloat(input)) ? $filter('number')(input / multi, 0) : "";

        return ret;
};
}]);

通过按下按钮,您可以看到出厂值发生了变化,但使用过滤器的那个没有变化,既没有自动也没有重复。如果我通过更改值强制摘要,则重复外部的值将更改但内部不会更改。

似乎有某种 "intelligent" 摘要 运行ning 并且看到 repeat 中的值没有改变,因此不会 运行 他们的摘要。但它看不到输出会发生变化,因为它没有考虑过滤器。

有人可以指出正确的方向让它在 1.3.1 中工作吗?或者告诉我错误?

亲切的问候

拉斐尔

默认情况下过滤器被认为是无状态的,即输出值仅取决于输入值。这给了 Angular 优化的机会:只要输入值不变,就不必重新计算输出值。此行为已随 1.3 更改。

您的过滤器是有状态的,因此您必须添加 $stateful 标志才能让 Angular 知道。

app.filter('bvcurrency', ['$filter', 'numberSvc', function ($filter, numberSvc) {
  function filter(input) {
    var multi = numberSvc.Current.Multiply,
    ret = ( !! input || input === 0) && angular.isNumber(parseFloat(input)) ? $filter('number')(input / multi, 0) : "";

    return ret;
  };

 filter.$stateful = true;
 return filter;
}]);