让我试着解决一些问题
我应该为整个页面创建一个 ng-app 还是多个
我页面上每个单独组件的非嵌套组件?
每个 SPA 只能有 1 个ng-app,因此每个组件不能有 ng-app。您可以为每个组件创建一个模块,这些模块可以绑定到ng-app 相关模块中。
如果是单个 ng-app,我希望有一个 ng-view
包括上下文和内容组件。
ng-view 将只包含活动视图的内容。它不需要任何菜单。可能有类似RootController 的东西,它是整个应用程序的容器。 html 将包含明显的ng-view 和ng-include 的数量。
类似
<div ng-controller='RootController'>
<div id="contextMenu"><ng-include src='contextMenuTemplate'></div>
<div id="primaryMenu" ><ng-include src='primaryMenuTemplate'></div>
<div id="secondarMenu" ><ng-include src='secondaryMenuTemplate'></div>
<div ng-view/>
</div>
在你的 RootController 中你会有一些类似的逻辑
if ($route.path) {
$scope.contextMenuTemplate="path1"; //path corresponding to the route
}
或者你也可以创建一个对象映射并使用它来选择模板
var viewTemplates= [{
path:"/home",
contextMenuTemplate:"path1",
primaryMenuTemplate:"path2",
secondaryMenuTemplate:"path3"
}]
现在可用于在 ng-include 中选择模板。
如何使用每个单独的选项(单个/多个 ng-app)进行客户端路由?
路由仅发生在ng-view 部分。您可以根据主视图选择要加载的其他模板。您还可以查看 ui-router 以了解高级路由信息。
更新
当身份验证和授权出现时,服务器和客户端都会发挥作用。服务器进行身份验证,然后可以使用该信息为不同的模板提供服务,无论用户是否经过身份验证,并且可能在同一个 url 上。例如/home/leftnav 可以根据经过身份验证的用户提供不同的内容。在 Angular 端也可以这样做,但这种行为可以被绕过,因为它只是 javascript。 api 调用(使用 webapi)也是如此,服务器可以决定发回什么。
可以使用服务\工厂跟踪客户端用户状态。像UserService 这样的服务和CurrentUser 这样的方法\属性可以提供当前登录用户的详细信息,并且可以注入到任何指令、过滤器、控制器中,从而根据用户是否登录以及登录的用户做出决定。 /p>