UI-router,在服务中使用stateparams

2023-11-26

我有这样的状态:

  .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,我会得到所有内容,包括参数。但我似乎无法使用它。使用 $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 before国家已经准备好了。更改状态时会发生几个事件。

首先是$stateChangeStart您将在其中收到要更改的状态和来自的状态以及这两个状态中的所有参数的通知。

此后,决心开始发生。您的情况的解决方案是调用一个使用的函数$stateParams

在一切都解决并且良好之后(没有拒绝或错误),并且就在之前$stateChangeSuccess事件,状态参数在中更新$stateParams object.

基本上,您无法通过以下方式访问要更改的状态的参数$stateParams反对直到after状态变更完成。这样做是为了防止状态更改被拒绝且无法更改。在这种情况下,先前的状态仍然存在,并且先前状态的参数将位于$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', '$q',
  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上面,为了将其链接到:idURL 的,您必须将其映射为 `{id: '@cat_id'}

factory('Category', function($resource){
    return $resource('/api/category/byId/:id/', {id: '@cat_id'});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UI-router,在服务中使用stateparams 的相关文章

随机推荐

  • 将模板传递给“rails new”

    当调用 rails new 时 显然可以通过 m 命令行参数传递某种模板或设置脚本 我发现这个通过https github com fortuity rails3 mongoid devise wiki Tutorial 演练 And ht
  • 由空格分隔的两个字符串自动连接

    我刚刚发现了一些非常有趣的东西 这是由我的打字错误引入的 这是一个非常简单的代码脚本示例 printf A B 结果将是 gt AB 有人可以解释这是如何发生的吗 作为 C 标准的一部分 相邻的字符串文字被连接起来 对于C 引用C99 但C
  • 谷歌分析 API V3 / OAuth 2

    我拼命地试图自己解决这个问题 并且不想带着这个问题来解决这个问题 但我已经束手无策了 不感谢 api oauth 文档 我正在 PHP 中工作 我试图避免使用Google Client and AnalyticsService类 通过使用
  • Android 中的并发文件访问

    我知道许多操作系统对文件系统执行某种锁定以防止视图不一致 Java 和 或 Android 对文件访问的线程安全性有任何保证吗 在我自己编写并发代码之前 我想尽可能多地了解这一点 如果我错过了已回答的类似问题 请随时关闭此线程 谢谢 And
  • 服务发现如何与现代 docker/docker-compose 一起工作?

    我正在使用 Docker 1 11 1 和 docker compose 1 8 0 rc2 在过去的美好时光 所以 去年 你可以建立一个docker compose yml像这样的文件 app image myapp frontend i
  • 使用 pika 发布消息时如何添加标头键:值对

    我正在编写一个自动化测试来测试消费者 到目前为止 我在发布消息时不需要包含标头 但现在我需要了 而且似乎缺乏文档 这是我的出版商 class RMQProducer object def init self host exchange ro
  • NSView 的自动调整大小行为

    我需要了解 NSView 如何自动调整其视图的大小 我已经在 IB 中设置了所有内容 并且我的子视图可以很好地调整大小 当我用鼠标调整窗口大小时 但是 如果我这样做 myMainView setFrame 使用我的新框架矩形 什么也没有发生
  • 如何将html5输入类型日期和时间转换为javascript日期时间

    我正在使用 html5 输入类型 日期和时间 如何将表单输入类型转换为javascript对象日期 其中包含时间 这是我的代码的一部分
  • 在 .NET 中使用 XML 注释有哪些优点?

    我无法理解使用 XML 注释的优点 我知道它们可以转换为代码外部的漂亮文档 但使用更简洁的 DOxygen 语法也可以实现同样的效果 我认为 XML 注释是错误的 因为 他们总体上混淆了注释和代码 它们更难被人类阅读 在单个屏幕上可以查看的
  • ggplot2:y 轴标签在绘图区域内左对齐

    我正在寻找一种自动移动 y 轴刻度标签的方法 以便它们显示左对齐within实际地块面积 我喜欢 ggplot 中主题组件的总体灵活性 但在尝试找到通用方法来实现此目的时遇到了困难 我知道给予axis text y的组合hjust 0负右边
  • cmake 是否可以选择避免使用未定义的变量(如 bash set-u)

    Does cmake有一种在使用未定义变量时生成错误的机制 有点像set u选项中bash 我有一个由多个项目组成的大项目CMakeLists txt文件 大约 1500 行 所以使用这种结构是相当困难的 if NOT DEFINED VA
  • 在 Angular 2 中重置模板驱动的表单(模型和验证)

    我们如何重置控件的验证状态模板驱动角度 2 的形式 我知道可以通过设置控件所绑定的模型值来重置控件 但是验证状态 原始 肮脏等 又如何呢 我尝试过这样的事情
  • 有没有办法在 C 中进行柯里化?

    假设我有一个指向函数的指针 stack push stack stk void el 我希望能够打电话curry stack push my stack 并返回一个只需要的函数void el 我想不出一种方法来做到这一点 因为 C 不允许运
  • 重定向时向 Zuul 添加标头

    我正在尝试使用Zuul将调用重定向到其他地方的下游系统 在重定向中 我需要添加一个包含必要数据的标头api接收重定向以进行处理 我似乎无法让下游系统检测到这些数据 附件是我的代码 我在用Zuul from Edgware SR3 Sprin
  • 杀死 Pthread 库中的线程

    I use pthread create thread1 attrs 如果发生某种情况需要杀死这个线程如何杀死它 首先存储线程id pthread create thr 然后稍后打电话 pthread cancel thr 但是 这不是推荐
  • C 中的“由于数据类型范围有限,比较始终为真”警告?

    我有以下代码 Point h define WIDTH 8 define HEIGHT 8 typedef struct Point char x char y Point Board c include
  • 给出 3 个点和一个绘图圆

    我想将点 0 1 1 0 和 0 1 提供给 python 并绘制经过它们的圆 是否存在一个Python模块可以做到这一点 我尝试过使用 matplotlib import matplotlib pyplot as plt plt plot
  • 无法从phonegap中的sd卡读取图像文件:android

    我是一个phonegap新手 我正在尝试使用 Android 中的 SD 卡读取图像文件 PhoneGap官方教程 问题是图像没有显示 而是在其位置出现一个问号 My Code var pictureSource var destinati
  • 使用指针作为容器迭代器是否违反标准

    安吉发表了评论 that a vector使用原始指针作为迭代器类型就可以了 这让我有点困惑 我开始研究它 发现需要vector迭代器只是它们 随机访问迭代器 明确指出指针符合以下条件 指向数组元素的指针满足所有要求 这是编译器提供迭代器的
  • UI-router,在服务中使用stateparams

    我有这样的状态 state admin category url category templateUrl views admin category html resolve category CategoryLoader function