当前位置: 首页 > 面试题库 >

AngularJS:如何在UI-Router中将一个状态设置为全局父级(使用模式作为公共部分)

华献
2023-03-14
问题内容

在$ stateProvider#state()中,我对使用UI-Router的Bootrtrap-ui模式进行了如下定义。

var state = {
    name: 'modala',
    parent: 'home',
    onEnter: function($modal, $state) {
        modalInstance = $modal.open({
            templateUrl: 'modala.html',
            controller: 'modalaCtrl',
            controllerAs: 'modal'
        });
        modalInstance.result['finaly'](function() {
            modalInstance = null;
            if ($state.$current.name === 'modala') {
                $state.go('^');
            }
        });
    },
    onExit: function() {
        if (modalInstance) {
            modalInstance.close();
        }
    }
};

我想在除家以外的任何地方使用“ modala”。

我不想创建的很多定义 'modala'

有没有一种方法可以接受它,并设置父项的必要条件?

添加说明

没有好的解决方案

  1. 不要将父级设置为模态状态。

结果:打开模式窗口时,不显示父级。

模式1示例

  1. 模态状态名称为$ {parent.name} .modal格式。

结果:有效。但是,关于一个模态窗口,必须定义许多状态。并且,每当我添加一个调用模态的父母时,都必须添加一个状态。

模式2范例

  1. 定义每个父母的模态

结果:与模式2相同。

模式3示例


问题答案:

有更新的插件 (问题中的
第二次尝试

我们将在操作中看到的是装饰器的不同用法,如我之前的文章中详细描述的那样

因此,首先,让我们提供几种状态,例如“ home”,“ page1”,“ page2” …,我们希望它们全部引入子状态-
具有模态功能。模态特征在所有子状态中都应该 是相同的 -但它们将属于不同的父项。

为此,我们可以使用如下状态定义:

.config(function($stateProvider) {
  // we just define empty child state for each existing parent
  $stateProvider.state('home.generalModal',  {});
  $stateProvider.state('page1.generalModal', {});
  $stateProvider.state('page2.generalModal', {});
})

如果我们以这种方式劫持装饰器,那就足够了:

.config(['$stateProvider', 
  function($stateProvider) {

    var endsWith = function(stringToBesearched, valueToBeFound) {
      return stringToBesearched.slice(-valueToBeFound.length) === valueToBeFound;
    }

    $stateProvider.decorator('data', function (state, dataBuilder) {
      // this is original, by configuration created parent
      var data = dataBuilder(state);

      // we can define where we do not want to change that default, configured
      // in our case, we extend every state which ends with .generalModal
      var skipState = !endsWith(state.name, ".generalModal")

      // and return taht default
      if(skipState) 
      { 
        return data;
      }

      // the modal instance per this state instance
      var modalInstance;

      // definition of the onEnter
      var onEnter = function($modal, $state) {
          console.log("Entering state: " + $state.current.name)
          modalInstance = $modal.open({
            templateUrl:'modal.html',
            controller: 'modalCtrl',
            controllerAs: 'modalCtrl'
          });
          modalInstance.result['finally'](function() {
            modalInstance = null;
            if(endsWith($state.$current.name, ".generalModal")) {
              $state.go('^');
            }
          });
        };

      // definition of the onExit
      var onExit = function($state) { 
          console.log("Exiting state: " + $state.current.name)
          if (modalInstance) {
            modalInstance.close();
          }
      };

      // extend state with both of them
      state.self.onEnter = onEnter;
      state.self.onExit = onExit;

      return data;

    });
}])

我们扩展了名称以和 结尾的 所有子状态。就这样。在一个地方…".generalModal"onExit``onEnter

在这里检查它的作用



 类似资料:
  • 问题内容: 使用应用程序的给定结构(源自angular-app): 标头:这里是网站导航,登录/退出工具栏等。它是动态的,具有自己的控制器 notification:全局通知容器。 容器:这曾经是我的。这就是所有其他模块的加载位置。 页脚:全局页脚。 状态层次结构如何?我已经看过了显示单个模块(联系人)的示例,但是通常一个应用程序将具有全局(根)状态,而在根状态内部则呈现其他模块状态。 我在想的是

  • 问题内容: 在不使用服务或在父控制器中构造观察器的情况下,如何使子状态访问主控制器的。 我无法在子状态下访问mainController范围-而是正在获取该范围的另一个实例- 不是我想要的。我觉得我缺少一些简单的东西。在状态对象中有一个共享的数据配置选项,但是我不确定是否应该将其用于这样的事情。 问题答案: 我创建了工作的插件,展示了如何使用和UI- Router。 状态定义未更改: 但是每个状态

  • 问题内容: 有没有办法查看所有已设置的状态? 在这种情况下,我希望状态分配可以分布在许多文件中。我想检查不同文件上或文件中的构建状态。 例如: 有一些会列出两种状态,和? 问题答案: 返回所有状态的数组。包含顶级抽象状态,但是您可以根据需要将其过滤掉。 如果您查看$state.get()最新版本的ui-router 的文档,则会注意到不向函数传递任何参数应返回所有已配置状态对象的数组。

  • 问题内容: 给定这样的HTML文件: 如何创建一个布局状态,以一个标题模板填充“标题”,用一个脚注模板填充页脚,然后允许子状态填充空的ui视图? 我想空的ui-view也可以命名为ui-view =“ main”。 问题答案: 一种方法是建立全局“根”状态。因此, 每个 州都是孩子。像root.pages,root.pages.edit,root.settings等。然后,您可以提供页眉和页脚的默

  • 大家好,我有代码主和tictactoe类 这里是main类的示例。在这段代码中,我输入了类似字符串号的内容 这是为我的tictactoe程序班准备的。如果我运行这个代码,我只有3x3tictactoe程序,所以我想用我的输入修改其中一个代码,这样我的tictactoe将输入x输入 我的问题是我想改变这个领域 成为 公共静态最终int行=输入;//行按COLS单元格public static fin

  • 问题内容: 我正在创建一个基于标签的页面,其中显示了一些数据。我在AngularJs中使用UI-Router来注册状态。 我的目标是在页面加载时打开一个默认选项卡。每个选项卡都有子选项卡,并且我想在更改选项卡时打开默认的子选项卡。 我正在使用函数进行测试,并且正在使用内部,但是由于循环效应问题(在state.go上对其子状态调用其父状态,依此类推,然后变成循环),它似乎无法正常工作。 在这里,我创