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

Angular UI Router:根据父解析对象确定子状态模板

松元明
2023-03-14
问题内容

这是我的app.js文件-我有一个父状态和两个子状态。两个子视图都需要该对象。

    states.push({
      name: 'parentstate',
      url: '/parent/:objId',
      abstract: true,
      templateUrl: 'views/parentview.html',
      controller: function() {},
      resolve: {
        obj: function(OBJ, $stateParams) {
          return OBJ.get($stateParams.objId);
        }
      }
    });

我想使用此已解析的obj来决定子模板

    states.push({
      name: 'parentstate.childs',
      url: '/edit',
      views: {
        "view1@parentstate": {
          templateUrl: 'views/view1',
          controller: 'view1Ctrl'
        },
        "view2@parentstate": {
          templateUrl: function(obj) {
            if (obj.something == something) {
              return "views/view2first.html";
           } else {
              return 'views/view2second.html';
            }
          },
          controller: 'view2Ctrl'
        }
      }  
    });

我怎样才能做到这一点?


问题答案:

有一个可行的例子。而不是templateUrl我们应该使用templateProvider。这是新的状态def:

  $stateProvider
    .state('parentstate.childs', {
      url: '/edit',
      views: {
        "view1@parentstate": {
          templateUrl: 'views.view1.html',
          controller: 'view1Ctrl',
        },
        "view2@parentstate": {
          templateProvider: function($http, $stateParams, OBJ) {

            var obj = OBJ.get($stateParams.objId);
            var templateName = obj.id == 1
              ? "views.view2.html"
              : "views.view2.second.html"
              ;

            return $http
                  .get(templateName)
                  .then(function(tpl){
                    return tpl.data;
                  });
          },
          controller: 'view2Ctrl',
        }
      }
    });

我们为什么要使用这种方法?如此处记录:

范本

TemplateUrl
templateUrl也可以是返回url的函数。 它采用一个预设参数stateParams,该参数不会被注入。

TemplateProvider
或者您可以使用 模板提供程序 函数,该函数 可以被注入,可以访问locals 并且必须返回模板HTML,如下所示:

检查TemplateProvider此工作插销中的基础解决方案



 类似资料:
  • 问题内容: 我的问题有两个: 1-我使用ui.router有一个父状态和几个子状态,所有状态都需要一个对象(存储在mongodb中),但是所有状态都会更新该对象。在这种情况下,使用父状态的resolve选项填充对象是否有意义? 2-如果这是执行此操作的正确方法,则如何从每个状态将“引用”(由ui.router创建的模拟服务注入器)更新为该对象。 为了帮助解释,他是这个想法的示例(省略了大量代码)

  • 我有以下来自< code>API的数据: 查看 。 由于我需要将其传递给组件,因此,我需要将其转换为以下内容: 我想根据将对象设为其父级的子级。该方案是如果为空,则它是顶级父级,如果长度为2,则它是第一级子级,如果长度为5,则它是第三级子级,然后如果长度为8,则它是第四级子级,然后长度为11,则它是第五级子级。由于第1级的孩子有2个长度的,那么后续的孩子将拥有作为家长加号的。为了更好地理解,请参阅

  • 我想做一个卡鲁塔风格的纸牌匹配游戏。随机选择一张卡片并显示在页面顶部。所有其他卡片显示在下面。这些卡是从带有的JSON中提取的。 预期结果: 单击下卡片。 如果下卡的id(?)==较高卡的id,得分,生成新的购物车。 不过,我不知道如何比较这两者。如何从子组件获取信息以与父组件状态进行比较?我不确定如何使用handleComparison()函数在此处找到特定单击div的“x”。 //if(thi

  • 问题内容: 我如何解析这个json对象: 我可以有N个端口,每个端口的值始终是key:value对。 到目前为止,我已经尝试过了: 有了这个我得到键(0,1),但值是空的。 我也尝试过这个: 但也不行。 这就是我解码json对象的方式: 问题答案: 使用此类型: 游乐场的例子 笔记: 字段名称非常匹配。我使用字段名称“ Ports”来匹配JSON文本中使用的名称。 Go类型在JSON中应具有相同级

  • 我有两个React组件,即和使用了一些重要的UI组件,但我相信它们与我的问题无关。 在,使用effect调用,该函数解析为一个类别数组,例如,。 我的目标是访问父组件()中复选框的状态(选中或未选中)。我采取了这个问题中建议的方法。(见验证答案) 有趣的是,当我记录

  • 问题内容: 在我正在开发的一个有角度的应用程序中,我希望有一个抽象的父状态,该状态必须解析其所有子状态的某些依赖关系。具体来说,我希望所有要求经过身份验证的用户的状态都必须从某些authroot状态继承该依赖项。 我遇到了无法始终解决父依赖关系的问题。理想情况下,我想让父状态检查用户是否仍自动登录到任何子状态。在文档中,它说 子状态将从父状态继承已解析的依赖项,并可以将其覆盖。 我发现仅当我从父级