Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – UI路由器,在服务中使用stateparams大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这种状态:

.state('admin.category',{
    url: '/category',templateUrl:'views/admin.category.html',resolve:{
      category: ['CategoryLoader',function(CategoryLoader){
        return new CategoryLoader();
      }]
    },})

这是我解决的服务.

.factory('CategoryLoader',['Category','$state','$q',//console.log($state)
  function(Category,$state,$q){
    return function(){
      var delay = $q.defer();
      Category.get({cat_id:$state.params.id},//not working
        function(category){
          delay.resolve(category);
        },function(){
         //delay.reject('Unable to fetch category ' + $state.params.cat_id)
      });
      return delay.promise;
    }
}]);

如果我将$state.params.id更改为数字,一切都有效.如果我在我的服务中安装$state,我会得到所有内容,包括params.但我似乎无法使用它.它应该是使用$route.current.params.id的平等,我在其他项目中使用过它.如何使用ui-router做同样的事情?

更新:更多信息

家长州:

.state('admin',{
    abstract: true,url: '/admin',templateUrl:'views/admin.html'
  })

分类工厂:

factory('Category',function($resource){
    return $resource('/api/category/byId/:id/',{id: '@id'});
  })

如果必要,我会把小提琴放在一起

解决方法

在这里看到的问题是你在状态准备好之前尝试访问$stateParams.更改状态时会发生几个事件.

首先是$stateChangeStart,在这里您将收到有关您要更改和来自的状态以及两个州的所有参数的通知.

在此之后,决心开始发生.在你的情况下解决方案是调用一个使用$stateParams的函数

一切都解决好了(没有拒绝或错误),并且在$stateChangeSuccess事件之前,state params are updated in the $stateParams object.

基本上,在状态更改完成之前,您无法通过$stateParams对象访问要更改的状态的参数.如果状态更改被拒绝且无法更改,则执行此操作.在这种情况下,前一个状态仍然存在,前一个状态的参数将在$stateParams中.

作为快速解决方法,您可以使用$stateChangeStart事件访问toParams(您要更改的状态的参数)并将它们放在某处($rootScope或服务),以便您可以在需要时访问它们.

以下是$rootScope的快速示例

.run(['$rootScope',function($rootScope){
    $rootScope.$on('$stateChangeStart',function (event,toState,toParams,fromState,fromParams) {
        $rootScope.toParams = toParams;
    });
}]);

.factory('CategoryLoader',['$rootScope','Category',function($rootScope,Category,$q){
    return function(){
      var delay = $q.defer();
      Category.get({cat_id: $rootScope.toParams.id},// <-- notice its using the object we put in $rootScope,not $state or $stateParams
        function(category){
          delay.resolve(category);
        },function(){
         //delay.reject('Unable to fetch category ' + $state.params.cat_id)
      });
      return delay.promise;
    }
}]);

此外,我认为您的资源未设置为正确使用您传递的ID.您正在使用上面的cat_id,为了将其链接到URL的:id,您必须将其映射为`{id:’@ cat_id’}

factory('Category',{id: '@cat_id'});
});

大佬总结

以上是大佬教程为你收集整理的angularjs – UI路由器,在服务中使用stateparams全部内容,希望文章能够帮你解决angularjs – UI路由器,在服务中使用stateparams所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: