【问题标题】:Is it possible to serve multiple partials from one $routeProvider conditional?是否可以从一个 $routeProvider 有条件地提供多个部分?
【发布时间】:2013-02-03 18:41:04
【问题描述】:

我的 Angular 应用程序有一个 index.html,正文中只有一个 <div ng-view></div>。在加载时,用户会看到来自单个局部视图的登录屏幕,通过 $routeProvider 提供服务,并且在登录成功时,路由将更改为已登录的局部视图:

$routeProvider.
    when('/login', {templateUrl: 'partials/login.html',   controller: 'LoginCtrl'}).
    when('/loggedin', {templateUrl: 'partials/loggedin_part.html', controller: 'UserCtrl'}).
    otherwise({redirectTo: '/login'});

登录后,我希望同时显示三个单独的部分:信息栏、导航和主项(主项可以与当前正在查看的任何导航项互换)。目前在我的 login_part.html 我有:

<ng-include src="'partials/infobar_part.html'"></ng-include>
<ng-include src="'partials/nav_part.html'"></ng-include>
<ng-include src="'partials/main_part.html'"></ng-include>

我的问题是,有没有更有效的方式通过 $routeProvider 提供不同的子视图?使用我当前的方法,我将为每个导航项/路线创建“持有人”部分,例如上面的 loggedin_part.html,即(假设的):

loggedin_admin_part.html

<ng-include src="'partials/infobar_part.html'"></ng-include>
<ng-include src="'partials/nav_part.html'"></ng-include>
<ng-include src="'partials/admin_part.html'"></ng-include>

路线

$routeProvider.
    when('/login', {templateUrl: 'partials/login.html',   controller: 'LoginCtrl'}).
    when('/loggedin', {templateUrl: 'partials/loggedin_part.html', controller: 'UserCtrl'}).
    when('/admin', {templateUrl: 'partials/loggedin_admin_part.html', controller: 'AdminCtrl'}).
    otherwise({redirectTo: '/login'});

对每个导航组以此类推。是否可以跳过“持有人”部分并在有条件的情况下为每条路线提供多个部分?类似的东西(注意,我知道语法是错误的,这是我试图说明的想法):

$routeProvider.
    when('/login', {templateUrl: 'partials/login.html',   controller: 'LoginCtrl'}).
    when('/loggedin', {templateUrl: 'partials/infobar_part.html', 'partials/nav_part.html', 'partials/main_part.html', controller: 'UserCtrl'}).
    when('/admin', {templateUrl: 'partials/infobar_part.html', 'partials/nav_part.html', 'partials/admin_part.html', controller: 'AdminCtrl'}).
    otherwise({redirectTo: '/login'});

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    我会通过改变你认为的部分来解决这个问题。

    例如:不要将“登录”和“登录”视为两个不同的部分。例如,您可以使用称为 loginStatus_bar 的部分。这部分有两个(或更多)可能的状态(登录、登录等)

    在您的“loginStatus_bar”部分中,您写下所有可能的栏,并使用ng-showng-hide 有条件地显示必要的栏。

    类似这样的东西(其中 'isLoggedIn' 是范围内的布尔值):

    <div ng-show="isLoggedIn" ng-controller="loggedInBar" >
    </div>
    <div ng-hide="isLoggedIn" ng-controller="loginBar" >
    </div>
    

    通过这种方式,您甚至不需要路由,因为“loginStatus_bar”部分可能会在您的应用程序中以一种或其他状态始终可见。

    【讨论】:

    • 我明白你在说什么,但是如果我不使用 $routeProvider,我该如何维护整个网站的深度链接?这种解决方案不会使后退和前进按钮变得多余,理想情况下我不希望这种情况发生吗?
    • 当然要使用$routeProvider!但是对于您的应用程序的主要内容,而不是(如果您选择这种工作方式)顶部和导航栏。我会在你的主页中使用三个
      ,每个部分一个(topBar、mainContent、navigationBar),我会使用 $routeProvider 来更改 mainContent。对不起,如果我不够清楚。毕竟,如果我们遵循 REST 范式,URI 应该反映应用程序的内容,而不是状态。
    猜你喜欢
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2011-12-03
    • 2021-11-24
    • 1970-01-01
    • 2021-01-07
    • 2016-11-27
    • 2013-03-06
    相关资源
    最近更新 更多