可能它就像我想的那样简单,但我无法在互联网上找到我的问题的答案,所以我希望你们只需看一小段我的代码就能知道答案。
问题:我在Angular中使用UI路由器,它在加载所有数据之前加载模板。因此,所有输入字段在模板已加载后都会收到正确的值。所以输入字段是空的一两秒......
我认为我的决心不应该如此:
所以我的ui-router代码看起来像这样(检查解析对象):
position: fixed;
现在控制器包含从API URL获取一些数据的承诺:
$stateProvider.state('teststate', {
url: '/test/',
templateUrl: 'app/page/template.html',
controller: 'testCtrl',
resolve: {
access: ["Access", function(Access) { return Access.isAuthenticated(); }],
UserProfile: 'UserProfile'
}
});
现在服务(连接到API)应该向Controller返回承诺:
function TestCtrl($scope, $state, $stateParams, TestService) {
TestService.get($stateParams.id).then(function(response) {
$scope.data = response;
});
}
现在问题可能是,因为Controller中的TestService.factory('TestService', ['Restangular', function(Restangular) {
var factory = {};
factory.get = function(id) {
return Restangular.one('api/test', id).get();
}
return factory;
}]);
(连接到API)在模板加载之前不会执行,因为它不在TestService.get()
对象中?那么UI路由器无法解析对API的调用?我只是好奇或者我应该将进行API调用的所有方法移动到resolve
内每个统计信息的解析对象。
我可以进行很多测试,但如果有人只是通过查看这个问题直接知道答案,那对我有很大帮助。
答案 0 :(得分:0)
您的假设都是正确的。
如果解析路由配置中的TestService.get
,控制器可以将数据作为可注入资源随时使用
答案 1 :(得分:0)
如果您不想在完成所有API调用之前运行控制器并显示模板,则必须将所有这些调用放在ui-routers resolve
中。
但是,如果API请求可能需要一段时间,那么在您的API调用正在运行时,立即过渡到新页面并显示某种加载指示符(例如block-ui)似乎会更好。