绑定和获取值在AngularJS中异步

时间:2019-07-12 20:09:03

标签: javascript angularjs asynchronous

我对AngularJS还是陌生的,对JS还是相对陌生的。我尝试用登录信息等实现一个angularjs项目。

现在我通过http调用以请求一个API,并获得用户和users对象的答案。当我打开站点时,console.logs会显示0个用户和user = undefined的结果。但是,当我在控制台窗口中打开对象时,它们将被填充。因此,结果不在页面开头,而是异步加载。到目前为止,如此清晰。

但是我认为AngularJS中的绑定是值更改后会自动更新的绑定。我环顾了一会,发现我应该使用工厂,但我不知道如何。有人可以指出我正确的方向吗?

HTML

<h1>Hi {{vm.user.firstname}}!</h1>
<p>You're logged in! Test{{testService.test}}!</p>
<h3>All registered users:</h3>
<ul>
    <li ng-repeat="user in vm.allUsers">
        {{user.username}} ({{user.firstname}} {{user.lastname}})
        - <a ng-click="vm.deleteUser(user.id)">Delete</a>
    </li>
</ul>

controller.js

angular
    .module('app')
    .controller('HomeController', HomeController);

HomeController.$inject = ['UserService', '$rootScope'];
function HomeController(UserService, $rootScope) {
    var vm = this;

    vm.user = null;
    vm.allUsers = [];
    vm.deleteUser = deleteUser;

    initController();

    function initController() {
        loadCurrentUser();
        loadAllUsers();
        log(vm);
    }

    function loadCurrentUser() {
        UserService.GetByUsername($rootScope.globals.currentUser.username).then(resolve => {
            vm.user = resolve.message;
        });
    }

    function loadAllUsers() {
        UserService.GetAll().then(resolve => {
            vm.allUsers = resolve.message;
        });
    }

    function deleteUser(id) {
        UserService.Delete(id).then(() => {
            loadAllUsers();
        });
    }
}

编辑:我找到了解决方案。引起问题的不是异步性。只是读取返回的数据。

vm.allUsers = resolve.message.recodsets;

这给出了所有要进行ng-repeat并获得一个登录用户的记录集:

vm.user = resolve.message.recodset[0];

这有点令人尴尬,但是以这种方式起作用。

0 个答案:

没有答案