【问题标题】:How to avoid old value flashed after view updated in Angular?如何避免在 Angular 中更新视图后旧值闪烁?
【发布时间】:2017-05-11 17:13:26
【问题描述】:

在我的 Angular 应用中,有一个主应用组件,它有一个事件监听器:

...
$scope.$on('page::change', function(e, value) {
  self.navList = value;
});
...

应用组件内的导航组件,它只有一个绑定到应用组件内的navList的变量:

app.component('navBar', {
  bindings: {
    list: '<',
  },
  templateUrl: 'templates/e/navBar.html',
  ...
});

在 navBar.html 中,我使用 ng-repeat 来显示 'list' 的数据:

<nav>
    <a ng-repeat="(key,value) in Nav.list" ng-href="{{ value }}" ng-bind="key"></a>
</nav>

每当我在应用程序中更改 navList 的值,或者我发出 'page::change' 事件时,数据视图都会在网页中闪烁,例如:

原文:

OldValue

然后闪现:

NewValue OldValue

最后:

NewValue

我应该如何解决这个问题? anuglar的版本是1.5.8

【问题讨论】:

  • 你不想同时保留(旧的和新的)值

标签: javascript angularjs web frontend angularjs-components


【解决方案1】:

我有时会遇到同样的问题,我的解决方案是放置一个元素以避免多个绑定到一个元素:

<nav>
    <span ng-repeat="(key,value) in Nav.list">
       <a ng-href="{{value}}">{{key}}</a>
    </span>
</nav>

我不知道这对你的情况是否有帮助,但我可能会尝试一下。

【讨论】:

    【解决方案2】:

    你可以试试这个:

    $scope.$watch('modelName' ,  function ( newValue, oldValue )  { 
      // access new and old value here
      console.log("Your former modelName was "+oldValue+", your current modelName value "+newValue+".");
    });
    

    【讨论】:

    • 是的,我试试这个来测试它。它以正确的方式更新。但只有视图直接改变。它应该从'oldValue' -> 'newValue' 改变,在我看来它会像'oldValue' -> 'newValue oldValue' -> 'newValue' 改变。最终结果是正确的,但是视图闪了。
    • 对不起,我的意思是不直接改。
    • 那么我建议在绑定值时清除以前的值:例如:$scope.myName="";
    • 你的意思是给navList分配一个空值吗?我应该把代码放在哪里?如果我不断改变它,它仍然不起作用
    • 您可以在控制器内部的任何位置写入
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多