Javascript 范围更改时重新运行角度过滤器

Javascript 范围更改时重新运行角度过滤器,javascript,angularjs,Javascript,Angularjs,我正在构建的应用程序有一个选项,用户可以更改公里和英里之间的单位距离 我构建了一个小过滤器来转换这些距离: app.filter('distance', function() { return function(input, scope) { var distanceName = (scope.units.distance === 'km') ? 'km' : 'ml'; // scope.units.value is 1000 by default

我正在构建的应用程序有一个选项,用户可以更改公里和英里之间的单位距离

我构建了一个小过滤器来转换这些距离:

app.filter('distance', function() {

    return function(input, scope) {
        var distanceName = (scope.units.distance === 'km') ? 'km' : 'ml';

        // scope.units.value is 1000 by default and 621 if miles are selected.
        return (input / scope.units.value).toFixed(2) + distanceName;
    };

});
在我的模板中,我只是这样使用它:

{{ point.distance | distance }}
问题是当
$scope.units.value
更改筛选器时,如果不更新该值,我应该以某种方式重新运行筛选器。。。即使我希望它是通过角度来完成的,但事实并非如此

当值更改时,将启动摘要,因此如果我使用
$scope.$apply()
强制它,将触发一个错误

如何解决它,我缺少什么才能使它工作?

过滤器的第二个(以及随后的)输入参数是使用冒号
运算符指定的。 现在,您没有为筛选器指定第二个参数

points.distance
是输入参数,冒号后指定的参数是其余可能的参数

所以,在你的例子中,<代码>单元,距离映射到你的过滤器上的<代码>范围>代码>,请考虑把它改成<代码>测量< /代码>或类似的

要使过滤器正常工作,还需要
单位.value
。在过滤器
返回函数(输入、测量、值)中添加一个附加参数。
并像这样使用它

{{ point.distance | distance:units.distance:units.value }}
编辑:如@charlietfl所述,一个更简单的解决方案可能是:

返回函数(输入、测量配置).

用法:


{{point.distance | distance:units}}

可以简单地在视图中添加units对象
{{{point.distance | distance:units}}
过滤器视图参数不是引用手表吗?看起来它们是深度手表,我将更新答案