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

从装饰器设置视图名称-Angular Ui Router

应俭
2023-03-14
问题内容

我以这种方式定义状态:

var parentStates = [
 {state : 'home', url: '/home', template: 'home.html'},
 {state : 'about', url: '/about', template: 'about.html'},
 {state : 'contact', url: '/contact', template: 'contact.html'},
 {state : 'home.data', url: '', template: 'data.html'},
 {state : 'about.data', url: '', template: 'data.html'},
 {state : 'contact.data', url: '', template: 'data.html'}
];

$urlRouterProvider.otherwise("/main/home");

$stateProvider
 .state("main", { abtract: true, url:"/main",
    views: {
        "viewA": {
            templateUrl:"main.html"
        }
    }
});
parentStates.forEach(function(value){
    $stateProvider
    .state("main." + value.state, {
        url: value.url,
        views: {
            "": {
                templateUrl: value.template
            }
        },
    })
});

我想写一个'decorator'用于设置视图名称的基础'templateUrl' (如您在上面看到的,该视图的名称为空)

这是装饰器的代码:

$stateProvider.decorator('views', function (state, parent) {
 var result = {},
 views = parent(state);

 // Don't touch the 'main state'
 if (state.name === "main") {
  return views;
 }

 angular.forEach(views, function (config, name) {
    if(config.templateUrl=='data.html'){
        result[name] = 'viewC@main';
    }
    else{
        result[name] = 'viewB@main';
    }
 });
return result;
});

当然,这是行不通的。我有点迷路了。


问题答案:

有一个工作的家伙

你快到了。让我们简化一下状态定义 (因为我们不需要嵌套的view对象,我们将在以后创建它)

parentStates.forEach(function(value) {
    $stateProvider
      .state("main." + value.state, {
        url: value.url,
        templateUrl: value.template,
      })
  });

这将是装饰器:

  $stateProvider.decorator('views', function(state, parent) {
    var result = {},
      views = parent(state);

    // some example when to not inject resolve
    if (state.name === "main") {
      return views;
    }

    angular.forEach(views, function(config, name) {

      // the super child template
      if(config.templateUrl === 'data.html'){
        result['viewC@main'] = config;
      }
      else{
        result['viewB@main'] = config;
      }
    });

    return result;
  });

在这里检查



 类似资料:
  • Python 拥有一件非常有趣的特性,那就是函数装饰器。这个特性允许您使用一些 非常简介的语法编辑 Web 应用。因为 Flask 中的每个视图都是一个函数装饰器, 这些装饰器被用来将附加的功能注入到一个或者多个函数中。 route() 装饰器您可能已经使用过了。但是在一些情况下您需要实现自己的装饰器。例如, 您有一个仅供登陆后的用户访问的视图,如果未登录的用户试图访问,则把用户 转接到登陆界面。

  • 操作步骤: ①进入编辑地图页面点击左上方地图名称。 ②进入编辑状态。 ③编辑完成后,点击回车或是√,地图名称修改成功。 提示 ●地图名称不能少于2个字符。 操作动图: [查看原图]

  • 我想在< code>RecycleView中仅绘制< code >标题类型的默认< code>ItemDecoration。但是每个< code >视图类型都会显示< code >分隔线。 定制装修: 设置: 对为什么会发生这种情况有什么建议吗? 更新 上面的代码是工作代码。但是有一只虫子。启动应用程序后,分隔符出现在所有元素中,然后只出现在正确的元素中。为什么会这样?

  • 问题内容: 我希望仅当登录用户具有所需的权限级别时,其他功能才可执行。 为了使我的生活更加复杂,我想使用装饰器。下面,我尝试在“装饰”功能上设置属性-如下所示。 但是当我这样做时: 我得到一个错误 我想念什么? 问题答案: 您正在检查内部(包装)函数上的属性,但在原始(包装)函数上进行了设置。但是,您 根本 需要包装函数: 你的装饰需要返回 的东西 那将取代原有的功能。原始函数本身(添加了属性)可

  • 问题内容: 我试图弄清楚如何获取方法上所有装饰器的名称。我已经可以获取方法名称和文档字符串,但是无法弄清楚如何获取装饰器列表。 问题答案: 如果可以更改从中调用装饰器的方式 至 那么您可以通过以下方式注册装饰器: 例如: 在这里,我们访问装饰器的元组: 在这里,我们仅打印装饰器的名称:

  • 我如何尝试解决这个问题(我的解决截图),和错误图像(错误回复)