0

我有一个网络应用程序。直到现在我已经使用 .when 来定义所有的 url。现在我想更好地了解 $state。所以,我有一个组成如下的网络:-登录页面(公共)-然后(私人):-仪表板主页-用户列表

私人方面由以下组成: - 导航栏(顶部)带有欢迎消息 - 侧边栏(右侧)带有按钮列表(主页和列表) - 视图(我看到仪表板主页,然后,如果用户按下“列表”,请参阅用户列表)。

在 main.js 我写了这个:

'use strict';

angular.module('app', [
'app.login',
'app.dashboard'
]).config(
['$stateProvider', '$urlRouterProvider', '$resourceProvider',
function($stateProvider, $urlRouterProvider, $resourceProvider) {

  $resourceProvider.defaults.stripTrailingSlashes = false;

$urlRouterProvider
  .otherwise('/login');

 $stateProvider

  // Definizione dei template di base per le pagine
  .state('app.dashboard', {
    url: '/dashboard',
    templateUrl: 'dashboard.html',
    controller: 'dashboardCtrl'
  })

  .state('app', {
    url: '/app',
    abstract: true,
    templateUrl: 'app.html',
  })

  .state('login', {
    url: '/login',
    templateUrl: 'login.html',
    controller: 'LoginController'
  })

  .state('app.list', {
    url: '/list',
    templateUrl: 'list.html',
    controller: 'ListController',
  })

}])

什么应该是/不应该是摘要?我应该做一个“普通”的 $state 吗?也因为我想添加一个授权,如果你没有登录,你就不能继续。你能帮我构造路由并理解抽象状态吗?

4

1 回答 1

0

您使用抽象状态的原因是当您的部分 url 不可导航时,保持您的定义干燥。例如,假设您有一个如下所示的 url 方案:

/home/index
/home/contact

但是,无论您的设计出于何种原因,此 url 都是无效的(即没有任何目的的页面):

/home

现在你可以简单地为这种情况创建两个状态,使用完整的 url,但是你会写/home/两次,而且描述有点复杂。最好的想法是创建一个家庭抽象父级,其中两个其他状态是子级(对于 ui-router 文档):

$stateProvider
    .state('parent', {url: '/home', abstract: true, template: '<ui-view/>'} )
    .state('parent.index', {url: '/index', templateUrl: 'index.html' })
    .state('parent.contact', {url: '/contact', templateUrl: 'contact.html' })

请注意,在父状态中,我们分配了一个模板,其唯一的孩子是 a ui-view。这可以确保渲染孩子(这可能是您的孩子出现空白的原因)。


有时您可能会注意到带有空白 url 的抽象状态的使用。此设置的最佳用途是当您需要父母时resolve。例如,您可能需要一些特定的服务器数据用于您的状态子集。因此,您可以创建一个具有所需解析的空白 url 父级,而不是将相同的解析函数放入每个状态。如果您想要分层控制器,它也可能很有用,其中父级对视图没有用处(不确定您为什么想要这个,但它是合理的)。

资料来源:为什么要给“抽象:真实”状态一个 url?

于 2016-04-17T20:00:31.890 回答