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

UI路由器多视图单个控制器

柳才良
2023-03-14
问题内容

一个单例控制器是否可能具有多个视图 [https://github.com/angular-ui/ui-
router/issues/494]

用例:我有一个ui-view = header和ui-view =
content。我根据当前状态更改标题以显示上下文相关的按钮(即返回,保存,过滤等)。我希望这些按钮在内容控制器中调用一个函数,但是如果执行以下操作,它将创建两个MyController对象。如果有任何初始化函数,它们将被调用两次,这在大多数情况下是对我服务器的查询的两倍。

views:{
  'header':{
    templateURL:'...',
    controller:'MyController'
  },
  'content':{
    templateURL:'...',
    controller:'MyController'
  }
}

更新:基于@pankajparkar

我当前的index.html看起来像这样(为便于理解而简化)

<nav ui-view="header"></nav>
<div ui-view="content"></div>

但是您的建议将包含/需要子视图

<!--index.html-->
<body ui-view></body>

<!--format.html-->
<nav ui-view="header"></nav>
<div ui-view="content"></div>

使用以下控制器

state('app', {
  url: '/app',
  controller: 'MyController',
  templateURL: 'format.html', //Targets ui-view in index.html
  views:{
    'header':{
      templateURL:'...', //Targets ui-view="header" in format.html
    },
    'content':{
      templateURL:'...', //Targets ui-view="header" in content.html
    }
  }
});

问题答案:

基本上,您需要在单身人士的某种提供程序(通常是服务或工厂)中处理此类事务,然后可以将单身人士注入到控制器中,并且控制器的每个实例都将使用共享/相同的提供程序。

如果您需要帮助来实现此功能,请共享您的控制器。

尽管我确实同意此处发布的其他答案中的建议,但是您可能仍要考虑将功能放在提供程序中。在大多数情况下,最好将大多数功能和数据存储在提供程序中,并且让您的控制器仅负责传递用户交互以触发提供程序中的适当调用(这将解决您当前的问题,因为它们单身人士)。



 类似资料:
  • 问题内容: 我想使用在视图中定义的一个控制器,但是没有定义任何东西。有没有办法做到这一点?请分享一个简单的例子以了解。 我有这个index.html 这是我的模型定义 app.js 控制台为空,并且html模板中的作用域为空。如果您有解决方案,请使用非常简单的示例。 我在这里阅读,我认为它起作用Rakrap Jaknap于2015-04-17 08:01回答 问题答案: 这里的重点是: 控制器始终

  • 问题内容: 我觉得这是一个简单的用例,但也许我遗漏了一些东西… 我想有 两个单独的视图,它们分别由各自的菜单控制。当我单击一个菜单上的链接时(或为此),我只想更新其中一个视图。此外,只需在中反映两个视图之一。 我尝试 定义一些状态: 现在,从您最喜欢的控制器中按,然后看着它将废话换成。我还想省略此状态下的定义,因为只能在我定义的第一和第三状态之间进行更改。 我在index.html中彼此并排坐着:

  • 问题内容: 我有一个抽象的父视图,该视图旨在与其嵌套视图共享一个控制器。 路由工作正常。 问题是,当我从其中一个嵌套视图更新变量时,更改未反映在视图中。当我从父视图执行相同操作时,它可以正常工作。这种情况不需要。 我的猜测是正在为每个视图创建一个新的实例,但是我不确定为什么或如何修复它。 问题答案: 这里的问题与以下问答有关:如何在angularjs ui-router中的状态之间共享$scope

  • 问题内容: 我有这样的结构: 我希望能够在如下所示的主要状态下定义模板,而不必在子状态下进行管理。 我希望命名的ui视图不是其子状态,并由该状态的views对象而不是子状态的templateUrl字段填充。我怎样才能做到这一点? 问题答案: 我们可以在 一种* 状态下使用 更多 视图,请参阅: * 多个命名视图 该定义只需要使用绝对命名即可: 如此处详细说明: 视图名称-相对名称与绝对名称 在幕后

  • 问题内容: 我正在尝试建立一个视图-我设置了两个控制器进行练习,一个是HeaderCtrl,其中包含一些数据(网站标题,标题背景等),另一个应该具有页面的主要内容- MainCtrl。 在定义路线时,我这样做是: 这工作得很好,但是我想要为此指定多个参数,如下所示: 这行不通,所以我猜这不是做到这一点的方法。我实际上要问的是-您可以在$ routeProvider中指定多个控制器吗?还是构建此视图

  • 问题内容: 我正在尝试创建文件查看器,并且想嵌套子目录。我正在使用ui-router,我希望每个子目录都有其自己的URL和状态。 说我有以下结构: 我希望我的路线是: 我想递归地执行此操作,而不是为每个子目录创建一个新状态 问题答案: 我建议用 一种状态 和 一种参数 - 来做。因为应该尽快定义所有状态,以支持url路由。所有这些唯一的folderPath可能不同,也可能是动态的-在运行时中,在应