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

angularjs ui-router-如何建立跨应用程序全局的主状态

贺子昂
2023-03-14
问题内容
<html ng-app="app">
<head>
...
</head>
<body>
  <div id="header"></div>
  <div id="notification"></div>
  <div id="container"></div>
  <div id="footer"></div>
</body>
</html>

使用应用程序的给定结构(源自angular-app):

  • 标头:这里是网站导航,登录/退出工具栏等。它是动态的,具有自己的控制器
  • notification:全局通知容器。
  • 容器:这曾经是我的<ng-view>。这就是所有其他模块的加载位置。
  • 页脚:全局页脚。

状态层次结构如何?我已经看过了显示单个模块(联系人)的示例,但是通常一个应用程序将具有全局(根)状态,而在根状态内部则呈现其他模块状态。

我在想的是我的app模块可能具有root状态,然后每个模块都应该具有其自己的状态,而我必须从状态 继承root。我对吗?

同样从ui- state示例中,它们既使用了$routeProvider$urlRouterProvider$stateProvider定义了url。我的理解是$stateProvide还处理路由。如果输入错误,应该使用哪个提供商进行路由?

编辑
:http://plnkr.co/edit/wqKsKwFq1nxRQ3H667LU?p
= preview

谢谢!


问题答案:

您采用的方法很接近。@ ben-
schwartz的解决方案演示了如何在根状态下为三个基本静态的视图设置默认值。缩孔工具中缺少的是您的孩子仍然需要引用顶部容器视图。

   .state('root',{
      url: '',
      views: {
        'header': {
          templateUrl: 'header.html',
          controller: 'HeaderCtrl'
        },
        'footer':{
          templateUrl: 'footer.html'
        }
      }
    })
    .state('root.about', {
      url: '/about',
      views: {
        'container@': {
          templateUrl: 'about.html'
        }
      }
    });

请注意views: { 'container@': ...},而不是只templateUrl: ...'root.about'

您可能还想问的是,是否可以让模块定义自己的状态集,然后将其附加到应用程序的状态层次结构中。每个模块提供的路由/状态的一种即插即用功能。

为此,您需要将模块紧密耦合到主应用程序。

在模块中:

angular.module('contact', ['ui.router'])
  .constant('statesContact', [
      { name: 'root.contact',
        options: {
          url: 'contact',
          views: {
            'container@': {
              templateUrl: 'contacts.html'
            }
          },
          controller:'ContactController'
      }}
    ])
  .config(['$stateProvider', function($stateProvider){    
  }])

然后,在应用程序中:

var app = angular.module('plunker', ['ui.router', 'contact']);
app.config(       ['$stateProvider', 'statesContact', 
           function($stateProvider,   statesContact){
    $stateProvider
    .state('root',{ ... })
    .state('root.home', { ... })
    .state('root.about', { ... })
    angular.forEach(statesContact, function(state) {
      $stateProvider.state(state.name, state.options);
    })      
}]);

这意味着您的所有模块都需要与您的应用程序中设置的这种模式兼容。但是,如果您接受此约束,则可以选择包括模块的任何组合,并且它们的状态会 神奇地
添加到您的应用程序中。如果您想变得更高级,可以state.options.urlstatesModuleName循环中进行修改,例如为模块的url结构添加前缀。

还要注意的是,模块ui.compat只需要当你 转换
$routeProvider$stateProvider。通常应ui.state改为使用。

另外,请不要忘记在header.html中进行调整$state.includes('root.contact')

更新的插头



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

  • 我是一个新的React Native,我正在尝试改变一个位于一个屏幕中的类组件中的算术函数的状态,然后在全局共享它,以便在不同的屏幕中使用它,并且可能改变它,有哪些方法可以做到这一点?

  • 问题内容: 我正在尝试在应用程序中保存缓存字典。 据我了解,应使用Application Context,尤其是flask.g对象。 设定: 现在,如果我这样做: 它打印。 继续执行以下操作: 我不明白,文档也完全没有帮助。如果我正确阅读它们,状态应该已经保留。 我的另一个想法是简单地使用模块范围的变量: 但是似乎这些随着每个请求而重置。 如何正确做到这一点? 编辑:flask10.1 问题答案:

  • 我正在使用Java、Tomcat和泽西创建一个REST Web应用程序。我正在使用注释(没有web.xml!)我最终使用了这个应用程序配置: 这是我的问题。Web容器有一个全局应用程序对象。我正在将其从应用程序构造函数保存到静态字段中。稍后我需要从其他类访问它(它包含全局配置、全局数据库连接工厂,可能还有其他东西。) 我这样做对吗?我怀疑一定有更好的方法:在处理注释时保存对应用程序的引用。但我不知

  • 我想创建一个全局状态(数据对象,而不是服务对象)。 我创建了类。 我想避免常规的全局状态, 但是,所有的教程都展示了如何为服务对象设置一个DI,并注册到接口。 如何根据需要使用注入? 编辑 我试过: 公共类AppInjector扩展了AbstractModule{ 但是我看到中没有新的long值。

  • 问题内容: 我知道我可以为每种形式或根形式指定一个,然后它将级联到所有子形式,但是我想有一种方法可以覆盖所有形式的默认Java Coffee Cup,即使那些形式我可能会忘记。 有什么建议? 问题答案: 您可以将根形式(我假设是)作为自己的子类,并将标准功能放入其构造函数中,例如: 您也可以在此处捆绑其他标准内容,例如将框架的窗口度量标准存储为用户首选项,管理初始窗格等。 此框架产生的任何新框架也