Angular JS是否支持在同一页面上路由多个视图

时间:2014-03-14 12:14:55

标签: javascript angularjs

Angular JS是否支持在同一页面上拥有多个ng-view部分,每个部分都有自己的模板?设置其配置时,您需要将不同的URL路径连接到不同的控制器和模板。但是当你在同一页面上有多个视图时,他们每个人都需要使用url中的#path值调整他们的模板和控制器,并且要更改我们需要切换为#path的视图模板价值变化。

那么不同的ng-view部分如何相互影响 - 因为每个部分都需要将自己唯一的#path值附加到url。或者url路径和#value以某种方式保存为每个ng视图中的私有构造,因此允许在同一页面上有多个ng-view部分。

5 个答案:

答案 0 :(得分:4)

多个视图是angularjs的一个限制,文档没有说清楚如何正确构建具有复杂视图的应用程序。请查看Jan Varwig关于此主题的帖子

相关章节:

" 视图不是您用来构建应用程序的内容! 实际上,视图更像是一种拐杖,一种快捷方式,可以创建类似于传统网站的结构,只有角度作为驱动程序。在开发Web应用程序时,处理复杂接口的方法是组合使用: 显式存储所需视图状态的范围对象/变量 ngSwitch对此视图状态的指令 指令包含自定义模板/执行复杂的DOM操作行为 根据需要加载的视图停止考虑您的应用程序。这种想法与命令式框架更好地对齐,但在角度方面效果不佳。"

" 视图容器没有意义,通过路由与语义分开。 我对UI-Routers嵌套视图的另一个次要抱怨是它们违反了AngularJS的另一个核心思想:您的DOM是描述应用程序结构的主要场所。阅读模板应该可以让您了解到底发生了什么。如果要编辑用户,请将指令放入模板中: 读者将立即看到该指令的作用以及它所依赖的数据。 如果您正确地编写指令,它将与位置无关,您可以将其放在应用程序的其他位置,只要您通过用户传递它将起作用。 使用视图可以使用无意义的容器填充模板,将每个视图的实际目的外包到其他地方定义的路径/状态。如果嵌套路由,每个视图的上下文变得隐含,移动它们就更难了,将数据传递到视图的唯一方法是通过范围。"

答案 1 :(得分:3)

ng-route不支持ng-view内的多个ng-app

您可以将ui-router视为一个项目,该项目为将多个布局(包括嵌套布局)绑定到URL提供了一些支持。

警告Emptor

  

注意:UI-Router正在积极开发中。就这样,虽然这样   库已经过充分测试,API可能会发生变化。考虑使用它   生产应用程序只有在你习惯了以后才能使用   更改日志并相应地更新您的使用情况。

答案 2 :(得分:2)

使用ui-router代替罐装ng-route! ui-router完全具有嵌套视图,它非常棒且非常容易学习。我建议使用ui-router而不是ngRoute给任何人。

答案 3 :(得分:1)

在对此进行了进一步的阅读后,似乎虽然多个ng-view的功能已经有多个请求但是它无法进入Angular版本,但是在将来的版本中可能存在某些内容。

在此discussion Misko Hevery指出了另一种方法,即使用ng-include。

然后在Jan Varwig的帖子中也有自定义指令方法,Vikas已经引用了这些方法。

还发现这个Angular Multiple View project on github可能是一种进一步的方法。

答案 4 :(得分:0)

对于这类事情,您可以使用模板。

创建一个文件,例如firstNavigation.html,其中包含您的html片段。然后像这样在控制器中调用它。

$ scope.nav ='src / partials / firstNavigation.html';