我有一个角度控制器,可以从服务器加载 4-5 个不同的资源。收到这些资源后,UI 会填充页面的必要内容。我现在遇到的问题是页面加载不是很流畅。页面的布局会立即加载,然后在接下来的 1-2 秒内会弹出不同的元素。加载时间并不是真正的问题,它只是它的突然性。有没有标准的方法来处理这个?
4 回答
我使用的一个技巧是将所有内容默认为不透明度 0,然后使用 CSS 转换在大约 250 毫秒(快速淡入淡出)内将它们转换为不透明度 1。我使用 ng-class 指令在加载完成后应用一个类。
给出这段代码:
ng-class='{showme:hugeArray}'
它应该在hugeArray
加载完成后应用一个类。在 hugeArray 加载或存在之前,它将是未定义的,因此为 false 并且showme
不会应用该类。当hugeArray
从您的资源中返回时,它就存在。
只需将它与这个 CSS 结合起来:
.something {
opacity: 0;
text-align: center;
-webkit-transition: opacity 0.25s ease-in;
-moz-transition: opacity 0.25s ease-in;
-o-transition: opacity 0.25s ease-in;
-ms-transition: opacity 0.25s ease-in;
transition: opacity 0.25s ease-in;
}
.something .showme{
opacity: 1;
}
I think the other answers here are good, but ngCloak is worth mentioning too. It would probably be best used in combination with the some of the other methods.
如果您无论如何都必须在控制器中加载资源,则应将此逻辑移至$routerProvider
resolve
属性,以便加载的资源在解析后注入控制器。$route
如果承诺被拒绝,服务将不会进行路由更改,因此当您的视图更改发生时,一切都在那里。
我能想到几种不同的方法,这里有一些。这里可能是一个简单的,您可以根据自己的需要进行更改。
HTML
<body ng-show="object.length"> ...
控制器
$scope.object = Object.query();
或者您可以使用 promise 对象来知道它们何时完成加载。我不知道您是否要在加载之前隐藏正文,同时显示它们,还是其他。