【问题标题】:$rootScope variable value not upating in Angular filter$rootScope 变量值未在 Angular 过滤器中更新
【发布时间】:2015-10-09 12:03:38
【问题描述】:

我们目前正在从 Angular 1.2X 升级到 1.4X,并且在使用过滤器方面遇到了奇怪的行为变化。

我在 plunkr 上做了一个例子:http://plnkr.co/edit/iVABuG5ApiwgyV6RRwQA?p=preview

  .filter('convert', function($rootScope) {
    return function(input) {
      var out = parseInt(input) * $rootScope.convert_rate;
      return out;
    };
  })

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

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

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

有人知道为什么会这样吗?

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

问题是因为角度实例 $filter 只有一次,所以您的过滤器中的 $rootScope 将是旧的。最好的方法是将您的 convert_rate 作为参数传递给您的过滤器。

看看我为你做的这个小家伙http://plnkr.co/edit/yNea42CeBBG2KNEmugku?p=preview

//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}}

【讨论】:

    【解决方案2】:

    在最新版本的 Angular(1.4 或 1.5,我不能说)中,当您修改 $rootScope 中的值时,Angular 不会触发摘要循环。所以你必须自己调用它:

    $rootScope.convert_rate = new_value;
    $rootScope.$apply();
    

    【讨论】:

      【解决方案3】:

      您只需要在过滤器参数中传递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;
          };
        })
      

      这里是plunker

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-11
        相关资源
        最近更新 更多