等待对象创建- (JavaScript/AngularJS)
Wait until Object created - (JavaScript/AngularJS)
我有一个工厂和一个控制器。
工厂vm.profiles = new ProfileFactory();
控制器if (Object.keys(vm.profiles.items).length == 0) {
vm.noProfiles = true;
}
我有一个原型nextPage()在ProfileFactory -> vm。配置文件对象。此方法查询后端。我想设置虚拟机。如果vm.profiles.items中没有项,则noProfiles变量为true。
问题它会自动进入if语句,因为if不会等到项目通过原型方法nextPage()填充。
我怎样才能强制JavaScript等待,直到它被填充?有没有更好的解决方案?
//编辑
这是nextPage方法的一部分。我应该在控制器中进行查询,然后从Restangular或$http返回承诺吗?
// Get List of Posts
Restangular.allUrl('user', ApiConfig.baseUrl + ':' + ApiConfig.port + '/users').getList(query)
.then(function (items) {
//console.log(items);
if (items.length > 0) {
for (var i = 0; i < items.length; i++) {
this.items.push(items[i]);
}
if (this.offset < items.meta.page_count) {
this.offset += 1;
} else {
return;
}
}
this.busy = false;
}.bind(this));
如果你正在使用ui-router,你可以使用它的resolve特性来指定在你的控制器激活之前需要加载什么。
这里你需要采取两个步骤:
-
在路由配置中设置解析
在控制器的路由配置中,添加
resolve:
键,该键带有一个函数,返回您希望在控制器激活之前预加载的项目的承诺。类似以下语句:$stateProvider.state('myState', { // ... resolve: { items: function(Restangular, ApiConfig /* add any other di's here */) { return Restangular.allUrl('user', ApiConfig.baseUrl + ':' + ApiConfig.port + '/users'); }
现在,当这个路由被触发时,你的控制器不会被加载,直到
items:
键下的函数返回的承诺被解析。这个promise的响应对你的控制器是可用的,你只需要通过: -
在您的控制器中添加项目到您的控制器定义中的di:
angular .module('yourModuleName') .controller('YourControllerName', function(..., items) { // ... // items should hold the response from the promise returning function in // route config });
相关文章:
- Loopback AngularJS JavaScript SDK - Gruntfile plugin
- 如何使用Python/Selenium网络驱动程序处理Angularjs/Javascript下拉列表
- 通过一个javascript文件引导AngularJS javascript文件
- 将php表转换为angularjs javascript方法
- 在angularjs/javascript中操作对象
- 在angularjs/javascript中对数组的操作
- AngularJS/Javascript:使用运算符对字符串进行排序
- Angularjs-javascript未在部分视图中加载
- AngularJS/JavaScript从Localstorage数组中删除特定元素
- Angularjs javascript canvas not cleared
- 如何使用angularJs/Javascript/Jquery获取表的最后一条记录并更新列值并插入到具有新记录的同一列
- 在angularjs/javascript中将参数传递给命名回调函数的问题
- Angularjs javascript加载有时不起作用
- Angularjs javascript loading
- AngularJS JavaScript 解析 JSON 的一部分
- Angularjs - javascript 日期格式问题
- AngularJS / Javascript create $scope runtime
- 从循环中删除重复项 - angularjs/javascript
- 新手:帮助理解 AngularJS/Javascript 语法
- Angularjs javascript modals