Javascript Angular UI路由器-解决未等待承诺解决到期状态切换

Javascript Angular UI路由器-解决未等待承诺解决到期状态切换,javascript,angularjs,angular-ui,Javascript,Angularjs,Angular Ui,我知道已经有一个类似的问题,但与我的问题并不完全相同 我有两个州: .state('entities', { url: '/', ... resolve: { data: function (xyzService) { return xyzService.listEntities(); } }) .state('entities1', { url: '/entities1', ... resol

我知道已经有一个类似的问题,但与我的问题并不完全相同

我有两个州:

.state('entities', {
    url: '/',
    ...
    resolve: {
       data: function (xyzService) {
          return xyzService.listEntities();
       }
 })

 .state('entities1', {
    url: '/entities1',
    ...
    resolve: {
       data: function (xyzService) {
          return xyzService.listEntities();
       }
 })
这两个状态都需要或依赖于同一个实体集合,我从xyzervce.listEntities()返回该集合。此服务方法从其侧面返回实体的数组并返回承诺

所以我希望在使用它之前,控制器中有这些“数据”。 当第一次调用状态时使用控制器的“数据”时,所有这些都可以完美地工作。例如,当我第一次打电话时,问题就来了 在状态“entities1”之后声明“entities”,最后声明“entities”。 因此,在状态“entities”的这一步中,resolve不等待解析所有依赖项,并且在该状态的控制器中,我有没有数组元素的“data”,并且$resolved属性为false,并且$promise对象为空

你能告诉我为什么会有这种行为吗?我应该期望每次调用状态时都解决了依赖关系,还是只有在第一次调用页面时才通过规范工作

你能给我一些解决这个问题的办法吗

致以最良好的祝愿

请求的服务示例:

    angular
        .module(SECURITY_MODULE)
        .factory('roleService', roleService);

    roleService.$inject = ['$resource', 'DOMAINS', 'notificationService', '$filter'];

    function roleService($resource, DOMAINS, notificationService, $filter) {
        var service = {
            ...
            listRoles: listRoles
            ...
        };

        var roleResource = $resource(DOMAINS.api + 'roles/:id/:command/:command2', {id : '@id'}, {
            ....
            'listRoles': {method: 'GET', isArray: true}
        });

        function listRoles(callbackSuccess, errorCallback) {
            var roles = roleResource.listRoles(function() {
                callbackSuccess && callbackSuccess(roles);
            }, function(error) {
                errorCallback && errorCallback(error);
            });

            return roles;
        }
....
    return service;
}

如果使用angular
$resource
,则应返回
xyzService.listenties().$promise


如果使用angular
$resource
应返回
xyzService.listenties().$promise


如文档中所列,资源立即返回一个值(空对象或空数组),然后获取数据,然后分配数据

重要的是要认识到调用$resource对象方法会立即返回一个空引用(对象或数组取决于isArray)。从服务器返回数据后,现有引用将填充实际数据。这是一个有用的技巧,因为通常资源被分配给模型,然后由视图进行渲染

当直接在控制器内部使用时,这可以正常工作,但不适用于路由器的解析,因为对于路由器库,该值已经用初始值解析

正如@dmitry所指出的,您应该使用通过
$promise
字段提供的资源承诺。在值出现或发生错误之前,此问题将无法解决


有关更多详细信息,请参阅以下主题的文章:

如文档中所列,资源会立即返回一个值(空对象或空数组),然后获取数据并稍后分配它

重要的是要认识到调用$resource对象方法会立即返回一个空引用(对象或数组取决于isArray)。从服务器返回数据后,现有引用将填充实际数据。这是一个有用的技巧,因为通常资源被分配给模型,然后由视图进行渲染

当直接在控制器内部使用时,这可以正常工作,但不适用于路由器的解析,因为对于路由器库,该值已经用初始值解析

正如@dmitry所指出的,您应该使用通过
$promise
字段提供的资源承诺。在值出现或发生错误之前,此问题将无法解决


有关更多详细信息,请参阅这篇关于以下主题的文章:

您能提供该服务的实现吗?一个小的jsbin示例如何显示问题?您好,Ajagele,您现在可以看到:)您能提供服务的实现吗?一个显示问题的小jsbin示例怎么样?你好,Ajagele,你现在可以看到:)这让我很开心!谢谢。这让我高兴极了!谢谢