UI 用于范围继承的路由器嵌套视图
UI Router nested views for scope inheritance
我无法理解 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>
第一个是嵌套状态的示例,它满足您继承范围对象的要求。例如 state/sub-state-a、state/sub-state-b
您从文档中获取的第一个片段上方的评论如下:
Shows prepended url, inserted template, paired controller, and
inherited $scope object.
第二个示例是一个嵌套视图,您可以在其中为每个状态定义多个视图,并根据您的用例使用每个视图。
来自文档:
Then each view in views can set up its own templates (template,
templateUrl, templateProvider), controllers (controller,
controllerProvider).
我无法理解 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>
第一个是嵌套状态的示例,它满足您继承范围对象的要求。例如 state/sub-state-a、state/sub-state-b 您从文档中获取的第一个片段上方的评论如下:
Shows prepended url, inserted template, paired controller, and inherited $scope object.
第二个示例是一个嵌套视图,您可以在其中为每个状态定义多个视图,并根据您的用例使用每个视图。 来自文档:
Then each view in views can set up its own templates (template, templateUrl, templateProvider), controllers (controller, controllerProvider).