ui-router 使用动态参数解析

Posted

技术标签:

【中文标题】ui-router 使用动态参数解析【英文标题】:ui-router resolve with dynamic parameters 【发布时间】:2013-10-01 11:56:01 【问题描述】:

这可能很简单,但我在文档中找不到任何内容,谷歌搜索也没有帮助。我正在尝试在$stateProvider 中定义一个状态,其中我需要在服务器上点击以提取所需数据的 URL 取决于状态 URL 参数。简而言之,类似于:

 .state('recipes.category', 
    url: '/:cat',
    templateUrl: '/partials/recipes.category.html',
    controller: 'RecipesCategoryCtrl',
    resolve: 
      category: function($http) 
        return $http.get('/recipes/' + cat)
          .then(function(data)  return data.data; );
      
    
  )

以上行不通。我尝试注入$routeParams 以获得所需的cat 参数,但没有成功。这样做的正确方法是什么?

【问题讨论】:

【参考方案1】:

您与$routeParams 关系密切。如果您使用 ui-router,请改用 $stateParams。 这段代码对我有用:

.state('recipes.category', 
    url: '/:cat',
    templateUrl: '/partials/recipes.category.html',
    controller: 'RecipesCategoryCtrl',
    resolve: 
         category: ['$http','$stateParams', function($http, $stateParams) 
             return $http.get('/recipes/' + $stateParams.cat)
                    .then(function(data)  return data.data; );
         ]
     
)

【讨论】:

以及如何在控制器RecipesCategoryCtrl中获取category 注入它:RecipesCategoryCtrl = function($scope, category) $scope.cat = category $stateParams 只会返回 url 中给出的参数(如 param 或 :param)。我不希望我的目标状态有 URL。此外,参数是一个对象。要以这种方式传递它,我必须先将其转换为 JSON,然后再将其解析回来。太慢而且太乱了。【参考方案2】:

对于那些使用 ui-router 1.0 $stateParams is deprecated 的人,你应该使用 $transition$ 对象来代替:

.state('recipes.category', 
    url: '/:cat',
    templateUrl: '/partials/recipes.category.html',
    controller: 'RecipesCategoryCtrl',
    resolve: 
         category: ['$http','$transition$', function($http, $transition$) 
             return $http.get('/recipes/' + $transition$.params().cat)
                    .then(function(data)  return data.data; );
         ]
     
)

【讨论】:

以上是关于ui-router 使用动态参数解析的主要内容,如果未能解决你的问题,请参考以下文章

将ui-router解析注入指令

微信小程序 之 网络请求数据解析页面渲染动态参数

微信小程序 之 网络请求数据解析页面渲染动态参数

JDK动态代理原理解析

JDK动态代理原理解析

如何在C++中解析命令行参数