Angular UI路由器不解析注入的参数 [英] Angular UI router not resolving injected parameters

查看:17
本文介绍了Angular UI路由器不解析注入的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此请考虑我的 angularUI 路由设置中的以下片段.我正在导航到路线/category/manage/4/details (例如).我希望在相关控制器加载之前解析类别",事实上,我可以在从类别服务返回类别的解析函数中放置一个断点,并查看该类别已被返回.现在在控制器本身中放置另一个断点,我可以看到类别"始终未定义.它不是由 UI 路由器注入的.

So consider the following fragment from my angularUI routing setup. I am navigating to the route /category/manage/4/details (for example). I expect 'category' to be resolved before the relevant controller loads, and indeed it is to the extent that I can put a breakpoint inside the resolve function that returns the category from the category service and see that the category has been returned. Now putting another breakpoint inside the controller itself I can see that 'category' is always undefined. It is not injected by UI router.

任何人都可以看到问题吗?它可能在我提供的代码之外的某个地方,但由于我在运行代码时没有错误,所以无法判断问题的根源可能在哪里.典型的 js 静默失败!

Can anyone see the problem? It may be somewhere other than in the code I've provided but as I have no errors when I run the code, it's impossible to tell where the source of the issue might lie. Typical js silent failures!

        .state('category.manage', {
            url: '/manage',
            templateUrl: '/main/category/tree',
            controller: 'CategoryCtrl'
        })
        .state('category.manage.view', {
            abstract: true,
            url: '/{categoryId:[0-9]*}',
            resolve: {
                category: ['CategoryService', '$stateParams', function (CategoryService, $stateParams) {
                    return CategoryService.getCategory($stateParams.categoryId).then(returnData); //this line runs before the controller is instantiated
                }]
            },
            views: {
                'category-content': {
                    templateUrl: '/main/category/ribbon',
                    controller: ['$scope', 'category', function ($scope, category) {
                        $scope.category = category; //category is always undefined, i.e., UI router is not injecting it
                    }]
                }
            },
        })
            .state('category.manage.view.details', {
                url: '/details',
                data: { mode: 'view' },
                templateUrl: '/main/category/details',
                controller: 'CategoryDetailsCtrl as details'
            })

推荐答案

这个概念是有效的.我在这里创建了 工作插件.变化就在这里

The concept is working. I created working plunker here. The changes is here

而不是这个

resolve: {
    category: ['CategoryService', '$stateParams', function (CategoryService, $stateParams) {
        //this line runs before the controller is instantiated
        return CategoryService.getCategory($stateParams.categoryId).then(returnData); 
    }]
},

我刚刚返回了getCategory的结果...

I just returned the result of the getCategory...

resolve: {
    category: ['CategoryService', '$stateParams', function (CategoryService, $stateParams) {
      return CategoryService.getCategory($stateParams.categoryId); // not then
    }]
},

使用幼稚的服务实现:

.factory('CategoryService', function() {return {
  getCategory : function(id){
    return { category : 'SuperClass', categoryId: id };
  }
}});

即使那是一个承诺... resolve 会等到它被处理...

even if that would be a promise... resolve will wait until it is processed...

.factory('CategoryService', function($timeout) {return {
  getCategory : function(id){
    return $timeout(function() {
        return { category : 'SuperClass', categoryId: id };
    }, 500);
  }
}});

这篇关于Angular UI路由器不解析注入的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆