为什么要给出一个"摘要:true"说一个网址?

时间:2015-10-17 00:50:34

标签: angularjs ionic-framework angular-ui-router state abstract

我今天正试图用ui-router来试图更好地理解Ionic中的脚手架,我注意到的一件事就是他们提供了抽象状态的"标签"一个网址。

我曾经使用抽象状态的唯一时间,我使用空字符串作为网址,我注意到如果我偶然尝试导航到抽象状态(而不是儿童状态) )我收到错误:

  

无法转换为抽象状态' [insertAbstractStateHere]'

编辑

"此外,在实验中,当我尝试将一个网址分配给我的抽象状态(离开Ionic)并仍然呈现嵌套状态视图时,我得到一个大鹅蛋。什么都没有显示出来。"

以上引用的陈述是假的!我在Plunker再试一次,嵌套状态确实出现了。

 angular.module('routingExperiments', ['ui.router'])
      .config(function($urlRouterProvider, $stateProvider) {

    $stateProvider

      .state('abstractExperiment', {
        abstract: true,
        url: '', //<--- seems as if any string can go here.
        templateUrl: 'abstractExperiment.html'
      })
      .state('abstractExperiment.test1', {
        url: '/test1',
        templateUrl: 'abstractTest1.html'
      });
  });

显然我确实做错了。所以我的新问题是:

在使用抽象状态时,是否有人会使用命名状态而不是空字符串,或者它只是一种风格选择?

3 个答案:

答案 0 :(得分:99)

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

/home/index
/home/contact

但是,无论出于何种原因,您的设计中此网址无效(即页面没有用途):

/home

现在你可以简单地为这种情况创建两个状态,使用完整的URL,然而你会写/home/两次,描述有点复杂。最好的想法是创建一个家庭抽象父母,其他两个州是儿童(对于ui-router docs):

$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'
    })

请注意,在父状态中,我们分配了一个唯一的子项为ui-view的模板。这可以确保渲染子项(并且可能是您的子项显示为空白的原因)。

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

答案 1 :(得分:-2)

.state('home', {
        url: '/home',
        abstract:true,                        
        controller: "HomeController",
        templateUrl:"path to your html"                       
})
.state('home.list', {
        url:"",
        controller: "HomelistController",
        templateUrl:"path to your html" 
})

答案 2 :(得分:-6)

使用抽象状态,也可以让ui路由器在重新加载控制器/页面的情况下进行导航。