【问题标题】:How to control transitions in angular to avoid seeing content loading如何控制角度转换以避免看到内容加载
【发布时间】:2016-02-10 10:01:12
【问题描述】:

当用户点击按钮时。我想知道如何获取内容、渲染它,然后更改视图并进行转换。

例如,在this website 开发的带有角度存档的效果。

如何在渲染视图时使用转换来显示信息? plunkr 或某种服务器中的任何示例?

【问题讨论】:

    标签: javascript angularjs transitions


    【解决方案1】:

    使用默认的ng-route,您可以定义resolve 属性。在更改位置之前,必须解析(从服务器检索)这些属性的值。这将防止在初始化之前显示任何视图。

    请参阅此plunker 以获取示例。

    重视图建议

    Angular 没有任何内置机制来通知 DOM 何时完成渲染。但是,您可以将某些代码排入队列,以便在摘要周期完成时执行。

    // Execute a function at the end of the current digest queue.
    
    $timeout(function() {
      // Do your thing here
      $rootScope.displayView = true;
    }, 0);
    

    另一种方法是让所有ng-repeats 通知您何时将最后一个条目添加到DOM。请注意,如果您在视图中有多个 ng-repeats,您将需要某种机制来跟踪它们(承诺是您的朋友)。

    app.directive('postRepeat', function() {
      return function(scope, element, attrs) {
        // The ng-repeat directive sets the $last property on the scope to
        // true when processing the last item.
        if (scope.$last){
          $rootScope.displayView = true;
        }
      };
    });
    

    【讨论】:

    • 嗯...如果我必须加载大量数据,您建议我在解析函数中加载它,以便为控制器渲染视图做好准备。但是......如果视图太重会发生什么(例如:有很多 ng-repeat)?我的意思是,渲染视图时是否可以触发事件?我想不会导致一切都在反应循环中运行
    • @Serginho:您加载的数据不会超过您已经加载的数据——resolve 将确保在更改路由之前加载它,从而防止所有讨厌的 DOM 弹出行为。请注意,每个路由都可以有自己的解析属性(并且仅在关联路由启动时触发)。
    • @Serginho:如果视图本身仍然负载很重,仅靠解析可能还不够。由于 javascript 是单线程的,因此遍历无数个 ng-repeat 项目总是很慢。如果你真的不能更好地分割视图(更少的 ng 重复),你仍然可以隐藏视图,直到 DOM 构建完成。但是浏览器将在此期间被冻结,并且您需要一些代码来通知构建完成时,因为 Angular 没有为此提供任何东西。我会用一些建议来更新答案。
    • 好的,好点。当范围摘要完成时,执行角度回调会更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多