如何在角度中重新运行过滤器
How to rerun filter in Angular
我有这个HTML,我无法更改它:
<div>How much is 100 * X {{100 | myFilter}}</div>
这是过滤器:
X=3
app.filter(function(){
return function(val){
return val*X
})
})
现在我想更改 X:
X=5
我希望 HTML 重新运行此过滤器并更新受此过滤器影响的所有值并更新值
X 仅定义为全局 JavaScript var,而不是在 HTML 中。我希望如果 X 值发生变化,它将更新依赖于它的任何过滤器。
我找到了答案。 还有谁需要它。我所要做的就是让过滤器在每个摘要周期重新运行:
filter.$stateful = true;
然后,在更改 X 后,我可以简单地使用 $apply 或 $digest 运行摘要循环。
演示有状态筛选器的 JSFiddle:
http://plnkr.co/edit/MRiGzYgXTmLLgrH9FnB1?p=preview
如果我
理解正确,那么您希望更改/输入 X 的值,结果在 html 中应该是 X * 100。在这里,我创建了小演示。看看它是否对你有帮助。
<div ng-app="myApp" ng-controller="MyCtrl">
Input: <input ng-model="X">
<div>How much is 100 * {{X}} = {{X | myFilter}}</div>
</div>
var myApp = angular.module('myApp', []);
myApp.filter('myFilter',function(){
return function(val){
return 100 * val;
}
})
myApp.controller('MyCtrl',['$scope', function($scope) {
$scope.X = 3;
}
]);
更新了带有状态过滤器、外部函数的演示。
<div id="appid" ng-app="myApp">
<div>How much is 100 * <span id="spX">X</span> {{100 | myFilter}}</div>
</div>
<button onclick="changeX()">
Change
</button>
var X = 3;
var myApp = angular.module('myApp', []);
myApp.filter('myFilter',function(){
function filter(val) {
return val * X;
}
filter.$stateful = true;
return filter;
})
document.getElementById("spX").innerText = X;
function changeX(){
X = 5;
document.getElementById("spX").innerText = X;
var scope = angular.element(document.getElementById("appid")).scope();
scope.$apply();
}
相关文章:
- 重新运行上次进行的AJAX调用
- 如何在node+express中重新运行请求处理程序
- 我想让我的程序重新运行开头,有点像循环 JavaScript
- Chrome扩展-重定向当前选项卡后重新运行扩展脚本
- 在不重新运行jquery验证的情况下检查表单是否有效
- 如何重新运行Meteor出版物以刷新客户端上收藏的内容
- 当屏幕方向改变时,重新运行javascript函数
- 重新运行自定义Modernizr测试
- 手动触发 Karma 以重新运行测试
- EmberJS:将输入值绑定到控制器属性,并在更改时运行过滤器
- 在本地存储之后重新运行脚本
- AngularJS重新运行控制器
- 在帧重新加载时检测帧更改或重新运行内容脚本
- 如何在角度中重新运行过滤器
- 在 DOM 修改后重新运行 jQuery 插件的任意方法
- 当$scope更改时重新运行反应式帮助程序
- AngularJS在ng-repeat中重新运行ng-if
- jQuery 在 ajax 加载的内容上重新运行脚本
- PHP脚本重新运行自己,直到进程完成.然后每周重新启动
- jquery/php重新运行php脚本