Javascript $rootScope变量值未在角度过滤器中更新
我们目前正在从Angular 1.2X升级到1.4X,并且在使用过滤器方面遇到了奇怪的行为变化 我在plunkr上做了一个例子: 基本上,我们取一个值(例如5)并通过过滤器将其乘以转换率。转换率在$rootScope变量中指定 在Angular 1.2X(检查index.html中是否定义了Angular 1.2X)中,当您更改转换率时,将运行过滤器并更新值 在Angular 1.5 beta中,当转换率改变时,过滤器不会运行,值也不会更新Javascript $rootScope变量值未在角度过滤器中更新,javascript,angularjs,Javascript,Angularjs,我们目前正在从Angular 1.2X升级到1.4X,并且在使用过滤器方面遇到了奇怪的行为变化 我在plunkr上做了一个例子: 基本上,我们取一个值(例如5)并通过过滤器将其乘以转换率。转换率在$rootScope变量中指定 在Angular 1.2X(检查index.html中是否定义了Angular 1.2X)中,当您更改转换率时,将运行过滤器并更新值 在Angular 1.5 beta中,当转换率改变时,过滤器不会运行,值也不会更新 有人知道为什么会发生这种情况吗?在Angular的最新
有人知道为什么会发生这种情况吗?在Angular的最新版本中(我不能说是1.4或1.5),当您在
$rootScope
中修改一个值时,Angular不会触发摘要循环。所以你必须自己称呼它:
$rootScope.convert_rate = new_value;
$rootScope.$apply();
问题是因为angular instance$filter只有一次,所以过滤器中的$rootScope将是旧的。最好的方法是将转换率作为参数传递给过滤器 看到我为你做的这个东西了吗
您只需要在filter参数中传递convert_rate,一切都将保持不变
Value: {{original_value | convert:convert_rate}}<br>
filter('convert', function($rootScope) {
return function(input,convert_rate) {
var out = parseInt(input) * convert_rate;
return out;
};
})
Value:{{original_Value | convert:convert_rate}}
过滤器('convert',函数($rootScope){
返回函数(输入、转换率){
var out=parseInt(输入)*转换率;
返回;
};
})
以下是我认为这是因为过滤器功能的变化。我发现了一个答案,你可以访问这个链接
//In your filter
.filter('convert', function() {
return function(input, convert_rate) {
console.log(input);
var out = parseInt(input) * convert_rate;
return out;
};
})
//Your HTML
{{original_value | convert: convert_rate}}
Value: {{original_value | convert:convert_rate}}<br>
filter('convert', function($rootScope) {
return function(input,convert_rate) {
var out = parseInt(input) * convert_rate;
return out;
};
})