UI路由器嵌套视图以进行范围继承

时间:2016-08-29 14:11:03

标签: angular-ui-router nested-views

我无法理解UI路由器嵌套视图中的嵌套视图...更具体地说是它们的样子......?

我需要理解它,因为我需要继承我的$ scope属性。

我在文档中看到了这个例子

$stateProvider
.state('contacts', {
    abstract: true,
    url: '/contacts',
    templateUrl: 'contacts.html',
    controller: function($scope){
        $scope.contacts = [{ id:0, name: "Alice" }, { id:1, name: "Bob" }];
    }           
})
.state('contacts.list', {
    url: '/list',
    templateUrl: 'contacts.list.html'
})
.state('contacts.detail', {
    url: '/:id',
    templateUrl: 'contacts.detail.html',
    controller: function($scope, $stateParams){
      $scope.person = $scope.contacts[$stateParams.id];
    }
})

然后我在文档中看到类似的内容

   $stateProvider
  .state('report',{
    views: {
      'filters': {
        templateUrl: 'report-filters.html',
        controller: function($scope){ ... controller stuff just for filters view ... }
      },
      'tabledata': {
        templateUrl: 'report-table.html',
        controller: function($scope){ ... controller stuff just for tabledata view ... }
      },
      'graph': {
        templateUrl: 'report-graph.html',
        controller: function($scope){ ... controller stuff just for graph view ... }
      }
    }
  })

这对我来说有点困惑,因为我需要$ scope继承,我需要嵌套我的视图 - 只是不太确定它是哪个例子。

更新 这是我的州

$locationProvider.html5Mode(false);
    $stateProvider
        .state('search', {
        abstract: true,
        url: '/search',
        controller: 'searchCtrl',
        controllerAs: 'vm',
        templateUrl: 'search/index.html'    
    })
      .state('search.query', {
        url: '/',
        controller: 'searchCtrl',
        controllerAs: 'vm',
        templateUrl: 'search/query.html'
      })
        .state('search.results', {
        url: '/?q',//for query parameter in url
        controller: 'searchCtrl',
        controllerAs: 'vm',
        templateUrl: 'search/results.html'
      });
$urlRouterProvider.otherwise('/');

我尝试用此方法实现的只是query.html上的一个简单搜索表单,一旦用户输入或选择搜索字词,它就会转到search.html,并带有其他搜索表单和结果。

这些是我的模板,我相信我已正确设置它们,但出现错误,因为没有任何显示。

/app/index.html
<div ui-view></div>


/app/search/index.html
<div ui-view></div>


/app/search/query.html
<form>
...
</form>

/app/search/results.html
<div ui-view></div>
<div>
...
</div>

1 个答案:

答案 0 :(得分:0)

第一个是嵌套状态的示例,它满足您继承范围对象的要求。例如state / sub-state-a,state / sub-state-b 您从文档中获取的第一个片段上方的注释为:

  

显示前置网址,插入模板,配对控制器和   继承了$ scope对象。

第二个示例是一个嵌套视图,您可以在其中为每个状态定义多个视图,并根据您的用例使用每个视图。 来自文档:

  

然后视图中的每个视图都可以设置自己的模板(模板,   templateUrl,templateProvider),控制器(控制器,   controllerProvider)。