如何仅在功能完成后才呈现?

时间:2020-12-31 13:22:44

标签: angularjs

我在控制器中定义了一个对象列表,并在 vm.init() 之后对其进行排序,如下所示:

const myItems = [{},{},{}...{}]

vm.init().then(function() {
    $scope.ajaxLoading = true;    // Loader
    $scope.itemsToRender = [];
    // Pushing items from myItems in this list according to some conditions

    $scope.itemsToRender.sort(function(a, b) {
        return a.order - b.order;
    })
}).finally(function() {
    $scope.ajaxLoading = false;
});

这按预期工作正常,

但现在我从 myList 的 api 响应中得到 vm.init(),当我来到这个页面时它没有对列表进行排序。但是如果我重新加载页面,它会对列表进行排序并完美呈现。

我试过调试,把console.log放在函数里,函数被调用了。

我做错了什么?排序完成前列表渲染了吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

AngularJS 需要了解变化,以便消化和反映模板中的变化。您使用的 $ source .zshrc N/A: version "N/A -> N/A" is not yet installed. You need to run "nvm install N/A" to install it before using it. 方法是 Javascript,因此尽管将其直接应用于 $scope.itemsToRender 变量,Angular 仍然不知道其内容已更改,可能是因为它使用了数组长度等属性,因此如果长度不更改它不会识别这些更改。

无论如何,我很确定您可以改用 sort() 过滤器,它会为您处理所有这些问题,这是本案例的最佳做法

orderBy

https://docs.angularjs.org/api/ng/filter/orderBy