AngularJS:在RouteProvider中解决-检测成功/失败?
我已经下定决心在我的routeprovider上工作,但我只是回报了承诺,所以我不知道它是成功还是失败。这就是我所拥有的AngularJS:在RouteProvider中解决-检测成功/失败?,angularjs,angularjs-routing,Angularjs,Angularjs Routing,我已经下定决心在我的routeprovider上工作,但我只是回报了承诺,所以我不知道它是成功还是失败。这就是我所拥有的 .when('/items', { templateUrl: 'views/items.html', controller: 'ItemsCtrl', resolve: { resolvedData: function(Restangular) { return Restangular.one('Items').
.when('/items', {
templateUrl: 'views/items.html',
controller: 'ItemsCtrl',
resolve: {
resolvedData: function(Restangular) {
return Restangular.one('Items').get();
}
}
})
现在这确实有效,但我如何检测成功或失败。我可以在resolve方法中输入这个,但是在成功和失败中我会返回什么呢。记住,我需要将项目注入控制器
.when('/items', {
templateUrl: 'views/items.html',
controller: 'ItemsCtrl',
resolve: {
resolvedData: function(Restangular) {
Restangular.one('Items').get().then(function(data) {
// success
}, function() {
// failure
});
}
}
})
我确实在这里看到了一个例子,但我不知道这是否是我需要的,以及如何使用它
它似乎在回复一个手动承诺
resolve: {
response: ['Warranty'
'$q',
function(Warranty, $q) {
var dfd = $q.defer();
Warranty.sendRequest().then(function(result) {
dfd.resolve({
success: true,
result: result
});
}, function(error) {
dfd.resolve({
success: false,
reason: error
});
});
return dfd.promise;
}
]
}
我真正想做的是在我的控制器中,将已解析的变量注入控制器,如果它失败,那么我还希望能够访问控制器中的故障,以便我可以向用户显示由于问题而无法渲染。您只需返回
的返回值,然后方法:
resolve: {
resolvedData: function(Restangular){
return Restangular.one('Items').get().then(function (data) {
...
return successData; // resolvedData will be resolved with the successData
}, function () {
...
return failureData; // resolvedData will be resolved with the failureData
});
}
}
然后
方法:
此方法返回一个新的承诺,该承诺通过successCallback或errorCallback的返回值被解析或拒绝
如果resolve函数失败,您可能希望向用户显示相应的内容(如错误消息)。
最好让resolve函数返回一个承诺(不带然后),并使用内部事件$routeChangeError
)
myApp.run(['$rootScope',function($rootScope) {
$rootScope.$on('$routeChangeError', function() {
// what you want to do if an error occurs
// ex: $rootScope.displayErrorMessage = true
});
])
处理一般错误(如网络错误/服务器关闭等)也会更容易。Ah这太好了,在我的控制器中,我如何确定我注入的值是成功还是失败??返回一个对象,例如{success:true,data:…}