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}}
过滤器视图参数不是引用手表吗?看起来它们是深度手表,我将更新答案