我对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];
这有点令人尴尬,但是以这种方式起作用。