角度UI路由器,状态更改

时间:2015-10-30 19:32:39

标签: angularjs angular-ui-router

我在此辩论了一段时间,但我得到了a Plunk来重现它。

我的状态为“联系”,默认情况下加载。与$state.transitionTo 在这种状态下,我有一些观点,它们都被加载,一切正常

如果我单击默认情况下将状态更改为“Home”或“ui-sref”,并且在“Home”状态/模板中我有ui-sref="contacts“。当我们单击返回以将状态设置为联系人它应该工作,但现在没有正确调用所有子视图。

似乎当ui-sref调用状态时,这个状态与默认情况下加载时的行为不同。

为什么$ state.transitionTo('');似乎与ui-sref的工作方式不同。

<script>
var myapp = angular.module('myapp', ["ui.router"])
myapp.config(function($stateProvider, $urlRouterProvider){

  // For any unmatched url, send to /
  $urlRouterProvider.otherwise("/")

  $stateProvider
  .state('home', {
    templateUrl: 'home.html',
    controller: function($scope){
    }
  })
  .state('contacts', {
    templateUrl: 'contacts.html',
    controller: function($scope){
    }
  })
  .state('contacts.list', {
    views:{
      "":{
        template: '<h1>Contact.List Working wi no Data defined.</h1>'
      },
      "stateSubView":{
        template: '<h2>StateSubView Working</h2>'
      },
      "absolute@":{
        template: '<h2>Absolute item</h2>'
      }
    }
  });
});
myapp.controller('MainCtrl', function ($state) {
  $state.transitionTo('contacts.list');
})

Q2: 当我在索引中添加视图时,为什么接触的Absolute标记工作,但当它在contact.html文件中时不起作用。绝对引用只适用于索引而不是在任何地方调用?

"absolute@":{
            template: '<h2>Absolute item</h2>'
          }

2 个答案:

答案 0 :(得分:0)

我在index.html中看到您有一个空的ui-view标记。你期望去那里?我想你不能这样做。路由器只是不知道它应该替换哪个州(家庭或联系人)。显然它选择了第二个(联系人)。我建议将url: '/'置于家庭状态,你会看到差异。

这肯定是一个问题。

除此之外: 您不能简单地从联系人afaik中的contacts.list访问视图。

答案 1 :(得分:0)

ui-view work as a wild card,即使我们有嵌套元素,也可用于切换多条路线。但是,如果我们有一个嵌套视图contact.list,那么只有将整个路径放在ui-sref="contacts.list"中才能访问它,因为list的{​​{1}}子项只能通过{{1}访问}}