Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $rootScope变量值未在角度过滤器中更新_Javascript_Angularjs - Fatal编程技术网

Javascript $rootScope变量值未在角度过滤器中更新

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.2X升级到1.4X,并且在使用过滤器方面遇到了奇怪的行为变化

我在plunkr上做了一个例子:

基本上,我们取一个值(例如5)并通过过滤器将其乘以转换率。转换率在$rootScope变量中指定

在Angular 1.2X(检查index.html中是否定义了Angular 1.2X)中,当您更改转换率时,将运行过滤器并更新值

在Angular 1.5 beta中,当转换率改变时,过滤器不会运行,值也不会更新


有人知道为什么会发生这种情况吗?

在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;
    };
  })