将参数与 UIRouter 和组件一起使用
Use parameters with UIRouter and Components
大家好,我在使用带参数的 ui 路由器时遇到了一些问题。
我正在使用 angularfire,我所有的数据都在 firebase 中。
//This is my router
.config(function($stateProvider, $urlRouterProvider){
$stateProvider
.state('home', {
url :'/home',
template :'<home></home>'
})
.state('projects', {
url:'/projects',
template: "<project-list></project-list>"
})
.state('projectDetails',{
url:'/project/:id',
template : '<project-detail></project-detail>'
});
$urlRouterProvider.otherwise('home');
})
这是组件 projectList 中的控制器
function ProjectListController($scope, $element, $attrs, $firebaseArray, $stateParams) {
var ctrl = this;
var projects_ref = firebase.database().ref().child("projects");
var projects = $firebaseArray(projects_ref);
});
ctrl.details = function (project) {
//$state.go('project-details', {: project.$id});
console.log(project.$id);
projectId = project.$id;
return projectId;
}
如何使“:id”起作用?我基本上想要的是列出所有项目的页面,一旦我点击一个 link 我需要 url 类似于“example.com/project/{projectId}
你对我有什么建议吗?
将状态 projectDetails
更改为 projects.details
。另外,给它自己的控制器,例如:
.state('projects.details',{
url:'/project/:id',
template : '<project-detail></project-detail>'
controller : 'ProjectDetailsCtrl as projectDetailsCtrl'
});
并且在您的 ProjectDetailsCtrl
中,您将可以访问 $stateParams
。例如
.controller('ProjectDetailsCtrl',['$stateParams',function ProjectDetailsCtrl($stateParams){
console.log($stateParams.id);
}])
假设 projectId
是一个以项目 ID 为值的变量,使用 $state.go('projects.detail',{id:projectId});
通过控制器触发到项目的导航。或者通过使用 ui-sref="projects.detail({id:projectId})
的元素,假设 projectId
可用作您视图的数据。
大家好,我在使用带参数的 ui 路由器时遇到了一些问题。
我正在使用 angularfire,我所有的数据都在 firebase 中。
//This is my router
.config(function($stateProvider, $urlRouterProvider){
$stateProvider
.state('home', {
url :'/home',
template :'<home></home>'
})
.state('projects', {
url:'/projects',
template: "<project-list></project-list>"
})
.state('projectDetails',{
url:'/project/:id',
template : '<project-detail></project-detail>'
});
$urlRouterProvider.otherwise('home');
})
这是组件 projectList 中的控制器
function ProjectListController($scope, $element, $attrs, $firebaseArray, $stateParams) {
var ctrl = this;
var projects_ref = firebase.database().ref().child("projects");
var projects = $firebaseArray(projects_ref);
});
ctrl.details = function (project) {
//$state.go('project-details', {: project.$id});
console.log(project.$id);
projectId = project.$id;
return projectId;
}
如何使“:id”起作用?我基本上想要的是列出所有项目的页面,一旦我点击一个 link 我需要 url 类似于“example.com/project/{projectId}
你对我有什么建议吗?
将状态 projectDetails
更改为 projects.details
。另外,给它自己的控制器,例如:
.state('projects.details',{
url:'/project/:id',
template : '<project-detail></project-detail>'
controller : 'ProjectDetailsCtrl as projectDetailsCtrl'
});
并且在您的 ProjectDetailsCtrl
中,您将可以访问 $stateParams
。例如
.controller('ProjectDetailsCtrl',['$stateParams',function ProjectDetailsCtrl($stateParams){
console.log($stateParams.id);
}])
假设 projectId
是一个以项目 ID 为值的变量,使用 $state.go('projects.detail',{id:projectId});
通过控制器触发到项目的导航。或者通过使用 ui-sref="projects.detail({id:projectId})
的元素,假设 projectId
可用作您视图的数据。