UI 路由器动态 <title> 标记
UI Router dynamic <title> tag
我正在为 ui-router 中的每个州添加标题,就像这样:
.state('projects', {
url: '/',
templateUrl: 'projects/projects.html',
ncyBreadcrumb: {
label: 'Projects'
},
data : {title: 'Projects'}
})
然后 title 属性采用该数据:
<title ng-bind="$state.current.data.title"></title>
如何从状态参数中获取数据并将其添加到上面示例中的标题中?我尝试了以下但没有成功:
.state('project', {
abstract: true,
url: '/projects/:projId',
resolve:{
projId: ['$stateParams', function($stateParams){
return $stateParams.projId;
}]
},
controller: 'projectCtrl',
templateUrl: 'project/project.html',
ncyBreadcrumb: {
label: 'Project',
parent: 'projects'
},
data : {title: '{{state}}'}
})
我会说,你快到了。标题可能如下所示:
<title>{{$state.current.data.title}} {{$stateParams.ID}}</title>
让我们有这两种状态:
.state('parent', {
url: "/parent",
templateUrl: 'tpl.html',
data : { title: 'Title for PARENT' },
})
.state('parent.child', {
url: "/child/:ID",
templateUrl: 'tpl.html',
controller: 'ChildCtrl',
data : { title: 'Title for CHILD' },
})
;
并这样称呼他们:
<a ui-sref="parent">
<a ui-sref="parent.child({ID:1})">
<a ui-sref="parent.child({ID:2})">
还有这个钩子:
.run(['$rootScope', '$state', '$stateParams',
function ($rootScope, $state, $stateParams) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
}])
所以,重点是,在 $rootScope
中我们可以同时访问 $state.current
和 $stateParams
检查一下 here (注意,要在分开的 window 中查看 plunker,请单击右上角的蓝色图标 - 新 window 将更改标题还有)
我建议您使用 params 选项而不是 data
选项,因为 params 可以是可选的,您可以通过在 $state.go
或 [=15= 中传递参数来动态设置它]指令。
代码
.state('projects', {
url: '/',
templateUrl: 'projects/projects.html',
ncyBreadcrumb: {
label: 'Projects'
},
params: {
title: { value: null }
}
});
来自控制器
$state.go('projects', {title: 'Page1'}); //you can change title while calling state
来自HTML
ui-sref="projects({title: 'Something Else'})"
您必须在 app.js 文件中使用 app.run() 并在 $rootScope.title 中分配您的标题。你可以按照这个代码
app.run(function($rootScope){
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState){
$rootScope.title=toState.data.title;
});
});
然后像这样
在你的html中绑定变量
<title ng-bind="title"></title>
我觉得会有帮助
我正在为 ui-router 中的每个州添加标题,就像这样:
.state('projects', {
url: '/',
templateUrl: 'projects/projects.html',
ncyBreadcrumb: {
label: 'Projects'
},
data : {title: 'Projects'}
})
然后 title 属性采用该数据:
<title ng-bind="$state.current.data.title"></title>
如何从状态参数中获取数据并将其添加到上面示例中的标题中?我尝试了以下但没有成功:
.state('project', {
abstract: true,
url: '/projects/:projId',
resolve:{
projId: ['$stateParams', function($stateParams){
return $stateParams.projId;
}]
},
controller: 'projectCtrl',
templateUrl: 'project/project.html',
ncyBreadcrumb: {
label: 'Project',
parent: 'projects'
},
data : {title: '{{state}}'}
})
我会说,你快到了。标题可能如下所示:
<title>{{$state.current.data.title}} {{$stateParams.ID}}</title>
让我们有这两种状态:
.state('parent', {
url: "/parent",
templateUrl: 'tpl.html',
data : { title: 'Title for PARENT' },
})
.state('parent.child', {
url: "/child/:ID",
templateUrl: 'tpl.html',
controller: 'ChildCtrl',
data : { title: 'Title for CHILD' },
})
;
并这样称呼他们:
<a ui-sref="parent">
<a ui-sref="parent.child({ID:1})">
<a ui-sref="parent.child({ID:2})">
还有这个钩子:
.run(['$rootScope', '$state', '$stateParams',
function ($rootScope, $state, $stateParams) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
}])
所以,重点是,在 $rootScope
中我们可以同时访问 $state.current
和 $stateParams
检查一下 here (注意,要在分开的 window 中查看 plunker,请单击右上角的蓝色图标 - 新 window 将更改标题还有)
我建议您使用 params 选项而不是 data
选项,因为 params 可以是可选的,您可以通过在 $state.go
或 [=15= 中传递参数来动态设置它]指令。
代码
.state('projects', {
url: '/',
templateUrl: 'projects/projects.html',
ncyBreadcrumb: {
label: 'Projects'
},
params: {
title: { value: null }
}
});
来自控制器
$state.go('projects', {title: 'Page1'}); //you can change title while calling state
来自HTML
ui-sref="projects({title: 'Something Else'})"
您必须在 app.js 文件中使用 app.run() 并在 $rootScope.title 中分配您的标题。你可以按照这个代码
app.run(function($rootScope){
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState){
$rootScope.title=toState.data.title;
});
});
然后像这样
在你的html中绑定变量<title ng-bind="title"></title>
我觉得会有帮助