在范围更改时重新运行角度滤波器
Re run angular filter on scope change
我正在构建的应用程序为用户提供了一个选项,可以更改公里和英里之间的单位距离。
我构建了一个小过滤器来转换这些距离:
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
更改过滤器时不更新值时,我应该以某种方式重新运行过滤器......即使我希望它是由 Angular 完成的,但它没有。
当值更改时,摘要将启动,因此如果我用$scope.$apply()
强制它,它会触发错误。
该如何解决它,我缺少什么才能工作?
筛选器的第二个(以及后续)输入参数是使用冒号:
运算符指定的。现在,您没有为筛选器指定第二个参数。
points.distance
是输入参数,冒号后指定的参数是其余可能的参数。
因此,在您的情况下,units.distance
映射到过滤器上的scope
,这是一个令人困惑的名称,请考虑将其更改为measurement
或类似的东西
为了使您的过滤器正常工作,您还需要 units.value
.向筛选器return function(input, measurement, value) ...
添加一个附加参数并像这样使用它
{{ point.distance | distance:units.distance:units.value }}
编辑:就像@charlietfl提到的,一个更简单的解决方案可能是:
return function(input, measurementConfig) ...
用法:
{{ point.distance | distance:units }}
相关文章:
- 重新运行上次进行的AJAX调用
- 如何在node+express中重新运行请求处理程序
- 我想让我的程序重新运行开头,有点像循环 JavaScript
- Chrome扩展-重定向当前选项卡后重新运行扩展脚本
- 在不重新运行jquery验证的情况下检查表单是否有效
- 如何重新运行Meteor出版物以刷新客户端上收藏的内容
- 当屏幕方向改变时,重新运行javascript函数
- 重新运行自定义Modernizr测试
- 手动触发 Karma 以重新运行测试
- 在本地存储之后重新运行脚本
- AngularJS重新运行控制器
- 在帧重新加载时检测帧更改或重新运行内容脚本
- 如何在角度中重新运行过滤器
- 在 DOM 修改后重新运行 jQuery 插件的任意方法
- 当$scope更改时重新运行反应式帮助程序
- AngularJS在ng-repeat中重新运行ng-if
- jQuery 在 ajax 加载的内容上重新运行脚本
- PHP脚本重新运行自己,直到进程完成.然后每周重新启动
- jquery/php重新运行php脚本
- 在范围更改时重新运行角度滤波器