【发布时间】:2014-04-10 22:23:30
【问题描述】:
我正在使用 ui-router 0.2.0(我知道它是旧版本,但由于各种原因我们被锁定在 Angular 1.0.8 上)并尝试使用 resolve: {} 来确保控制器正在处理具体数据而不是最终数据(承诺)。
我目前有以下:
resolve: {
items: ['listSvc', function (listSvc) {
console.log('resovling items');
var items = listSvc.getItems();
items.then(function () {
console.log('horray!');
});
return items;
}]
}
现在项目包含大约八个项目,只有一个标题,我的视图只是执行 ng-repeat 并显示每个标题。
控制器:
App.controller('MyCtrl', ['$scope', 'items', function ($scope, items) {
console.log('MyCtrl');
$scope.items = items;
}]);
观点:
<div>
<h1>Items</h1>
<div data-ng-repeat="item in items">
{{ item.Title }}
</div>
</div>
有时我看到“万岁!”之间的间隔大约为 2 秒。以及由此产生的视图。其他时候我看到“万岁!”但永远不要过渡到预期的视图。如何解决/解决此问题?
如果重要的话,我的 listSvc 也使用 Q 而不是 $q。
编辑:为了清晰起见,将问题移至底部
编辑:
虽然所选答案适用于我的所有 jsbin 测试,并且根据我找到的所有文档都是正确的。这是解决我实际问题的方法,我知道它令人讨厌和可怕,但这是我唯一可以为我们的应用程序工作的东西。在下面的示例中,我的 listSvc 使用的是Q
resolve: {
items: ['listSvc', 'currentUser', '$q', '$rootScope', function (listSvc, currentUser, $q, $rootScope) {
console.log('my => items');
var deferred = $q.defer();
listSvc.setUser(currentUser);
listSvc.getMyItems().then(function (myItems) {
deferred.resolve(myItems);
return myItems;
}).fin(function () {
$rootScope.$apply();
});
return deferred.promise;
}]
}
【问题讨论】:
-
您的问题/疑问是什么?
-
有时我看到“万岁!”之间的间隔大约为 2 秒。以及由此产生的视图。其他时候我看到“万岁!”但永远不会转换到预期的视图。
标签: angularjs promise angular-ui-router q