在“onEnter”挂钩中获取状态名称

2024-01-12

我正在构建一个应用程序,我想在用户进入和离开路线时切换服务中的属性。为此,我需要知道该州的名称onEnter and onExit钩子。这对于onExit钩子,因为我可以注入$state服务并读取当前状态的名称。但由于当前状态尚未设置,当onEnterhook 被调用时无法知道我们要转换到什么状态。

我仍然需要对状态的其他部分进行精细控制,因此我宁愿没有任何 for 循环。我正在寻找一种能够通过的方法onEnter函数到状态,同时仍然在函数本身内部检索状态的名称。

这是我写的代码:

function onEnter($state, Steps) {
  var stateName = $state.current.name; // Not possible. The current state has not been set yet! 
  var step = Steps.getByStateName(stateName);

  step.activate();
}

function onExit($state, Steps) {
  var stateName = $state.current.name; // No problem. We know about the state. 
  var step = Steps.getByStateName(stateName);

  step.deactivate();
}

$stateProvider
  .state('step1', {
    url: '/step1',
    templateUrl: 'templates/step1.html',
    controller: 'StepOneController',
    onEnter: onEnter,
    onExit: onExit
  });

我现在使用的解决方案是使用工厂来创建上下文onEnter函数传递给状态。这远非理想,因为我仍然需要将州名传递给它。

以下是上述解决方法的示例:

function onEnterFactory(stateName) {
  return function onEnter(Steps) {
    var step = Steps.getByStateName(stateName);

    step.activate();
  }
}

$stateProvider
  .state('step1', {
    url: '/step1',
    templateUrl: 'templates/step1.html',
    controller: 'StepOneController',
    onEnter: onEnterFactory('step1')
  });

Use this在 onEnter onExit 挂钩中。 onEnter 由以下命令调用:

$injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);

第二个参数为$injector.invoke的值是this对于它调用的函数。所以你的代码应该如下所示:

function onEnter(Steps) {
  var stateName = this.name; 
  var step = Steps.getByStateName(stateName);

  step.activate();
}

function onExit(Steps) {
  var stateName = this.name;
  var step = Steps.getByStateName(stateName);

  step.deactivate();
}

$stateProvider
  .state('step1', {
    url: '/step1',
    templateUrl: 'templates/step1.html',
    controller: 'StepOneController',
    onEnter: onEnter,
    onExit: onExit
  });

这是访问州名称的工作示例onEnter and onExit hooks:

angular.module('myApp', ['ui.router'])

.config(function($stateProvider) {
  function onEnter() {
    console.log('Entering state', this.name);
  }

  function onExit() {
    console.log('Exiting state', this.name);
  }

  $stateProvider.state('state-1', {
    url: '/state-1',
    template: '<p>State 1</p>',
    onEnter: onEnter,
    onExit: onExit
  }).state('state-2', {
    url: '/state-2',
    template: '<p>State 2</p>',
    onEnter: onEnter,
    onExit: onExit
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.1/angular-ui-router.js"></script>

<div ng-app="myApp">
  <nav>
    <a ui-sref="state-1">State 1</a>
    <a ui-sref="state-2">State 2</a>
  </nav>

  <div ui-view></div>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在“onEnter”挂钩中获取状态名称 的相关文章

随机推荐

  • 在 JavaScript 中撤消对已排序数组的排序

    我有一个数组 我整理一下 我得到第二个数组 它是already根据第一个排序 我需要反转第二个数组的排序 例如 如果第一个数组 未排序 是 9 5 3 0 2 然后我想对其进行排序 使其变为 0 2 3 5 9 然后我收到根据第一个数组排序
  • 将 Cosmos DB 文档属性序列化和反序列化为字符串

    我正在使用 Json Net 来装饰我的文档属性 public class MyDocumentType Document JsonProperty JsonConverter typeof StringEnumConverter publ
  • 尝试了解如何通过 webpack 导入 Web-Assembly 包

    I m on email protected cdn cgi l email protection我正在尝试使用这个网络程序集库https github com vislyhq stretch https github com vislyh
  • 有没有办法在多台计算机上同步 Sublime Text 设置?

    我有两台电脑 一台台式机和一台笔记本电脑 现在我已经将 ENV 设置为借助 Dropbox 链接进行同步 有没有办法在这两台计算机之间同步我的 Sublime Text 3 设置 包括我的所有插件 首选项文件等 如果是这样 我该如何设置才能
  • 将streambuf的内容复制到字符串

    显然boost asio async read不喜欢字符串 因为它是唯一的重载boost asio buffer让我能够创造const buffers 所以我不得不将所有内容读入流缓冲区 现在我想将streambuf的内容复制到一个字符串中
  • 带有简单 Web 包装器的 python tkinter

    我正在编写一个带有 UI 的简单 python 程序 但我不知道如何将网页放入程序中 我尝试在 Google 上搜索 但找不到任何简单的实现 任何链接都会很棒 回顾一下 我只想要一个简单的 GUI python 程序 其中嵌入了一个网页 基
  • 用户单击 ajax 调用后,打开新选项卡而不使用弹出窗口阻止程序

    我有一个页面 使用户能够通过 HTML5 画布执行图像操作 在该页面上 有一个 facebook 共享按钮 用于在 facebook 上共享画布的生成图像 单击链接时 将向服务器 ASP NET MVC 发送一个ajax请求以执行图像生成
  • 在 javascript 中注入 PHP 的转义字符的正确组合?

    我已经尝试了所有我知道的组合 但无法得到正确的结果 echo lt lt
  • C 中 ptrdiff_t 在哪里定义?

    哪里ptrdiff t在C中定义 它定义在stddef h 该标头定义了整数类型size t ptrdiff t and wchar t 函数宏offsetof 以及常数宏NULL
  • 使用 artisan migrate 时出现流明错误

    我是 Lumen 新手 当我尝试使用时 php artisan migrate 我收到以下错误 PDOException SQLSTATE HY000 2002 No such file or directory 如果我将 localhos
  • 如何在C++中计算文件的行数?

    如何使用标准类来计算行数 fstream and ifstream 这个怎么样 std ifstream inFile file std count std istreambuf iterator
  • 续集查询的可选参数

    早上好 我对 NodeJS sequelize 世界相当陌生 目前在尝试在屏幕上显示仪表板时遇到问题 该仪表板具有三个过滤器 两个日期 期间 客户姓名和员工姓名 用户可以选择无 一个 两个或所有过滤器 我的数据库需要相应地工作 话虽这么说
  • 在 CSS 中创建具有可滚动内容的可变高度“固定”标题

    我想在页面上创建一个标题 当您滚动页面时该标题不会移动 这看起来很简单 只需将 position fixed 添加到样式中 但内容就会出现在标题下方 因为标题 从流中删除 所以我认为的解决方案是在内容中添加 margin top heigh
  • 在Python中取消引用列表内的列表

    当我以 通用 方式定义列表时 gt gt gt a 3 gt gt gt a 然后尝试仅附加到外部列表的第二个元素 gt gt gt a 1 append 0 1 gt gt gt a 0 1 0 1 0 1 如上所示 它附加到外部列表的所
  • 鼠标移开时保持子菜单打开

    我正在开发的导航菜单具有默认的 CSS 行为 对于那些禁用 JavaScript 的极少数人 默认情况下 不显示子菜单 main navigation ul ul display none 将鼠标悬停时 会显示子菜单 main naviga
  • 如何在 UITests 中访问“tableViewCell”中的“detailTextLabel”?

    我想检查是否有tableViewCell detailTextLabel在我的 UITest 中使用给定的字符串 问题是当我搜索时app tables cells children matching staticText 它只会寻找那些标签
  • 函数 nil.id/0 未定义或私有 - Elixir

    我正在尝试使用监护人身份验证来测试用户 ID 是否等于资源 ID 如果没有当前令牌 并且我尝试访问正在检查令牌的网址 则会收到此错误function nil id 0 is undefined or private 我来自红宝石背景 我不知
  • 语法高亮在 Jekyll 的 MD 文件中不起作用?

    使用 kramdown 解析器和 rouge gem 时 语法荧光笔似乎无法在 Jekyll 中工作 引号也不会突出显示和格式化 标记文件 javascript function order words var array words sp
  • 检查变量类型以进行代码分析

    在 Roslyn 代码分析器中检查变量类型的正确方法是什么 我正在注册一个ObjectCreationExpressionSyntax节点和我可以获取类型 但我不确定检查它是否是我关心的类型的正确方法 我找到了一种通过检查显示字符串来做到这
  • 在“onEnter”挂钩中获取状态名称

    我正在构建一个应用程序 我想在用户进入和离开路线时切换服务中的属性 为此 我需要知道该州的名称onEnter and onExit钩子 这对于onExit钩子 因为我可以注入 state服务并读取当前状态的名称 但由于当前状态尚未设置 当o