我有$stateParams
的现象我想要动摇:
我有这个代码来传递状态: 在我的控制器中:
$scope.goToPath = function ( path, pid ) {
$scope.pid = pid;
console.log("scope pid : " + $scope.pid + " Full path : " + $state.current.name);
$state.go(path, {projectId : pid} );
};
在我的州定义:
state('projects.detail', {
url: '/detail',
params : { projectId : null},
templateUrl: 'app/pages/projects/detail/detailProject.html',
title: 'Detail du projet',
});
然后我用ng-init
:
$scope.getProjectById = function () {
projectFactory.getProject($stateParams.projectId)
.success(function (data) {
if(data == null){
$scope.errorMessage = "Le projet avec l'id : " + pid + " n'existe pas";
}else {
$scope.project = data;
$scope.project.dateDebut = new Date(data.dateDebut);
$scope.project.dateFin = new Date(data.dateFin);
}
})
.error(function (data, status, headers, config) {
$scope.errorMessage = "Erreur 1: " + data.error + ' ' + status;
});
};
正如你在这里看到的那样,我正在传递$stateParams.projectId
我的州定义中所述的值。
在我的工厂我有:
factory.getProject = function (projectId) {
console.log('Project Id factory : '+ projectId + $stateParams.projectId);
return $http.get('http://localhost:8080/gestionprojet/Project/' + $stateParams.projectId)
};
现在,当我跑步时,我得到了:projectId = undefined
和$stateParams.projectId = 4
现在我在函数中传递projectId所以通常它应该有一个值,不是吗?
有人可以解释一下,它会非常感激。感谢
答案 0 :(得分:0)
对我而言,这是一个设计问题:
让我们说这是您应用的HTML:
<div ng-app="demoApp" ng-controller="appCtrl">
<a href ng-click="goToPath('detail', 234)">redirect</a>
<div ui-view>
</div>
</div>
您有一个可以处理重定向的应用控制器。您正在将/detail
传递给$state.go
函数。此函数将状态的名称取为URL。
然后,应该由状态模板的ng-init
调用的第二个函数在app的控制器中声明。
对我来说,它应该在州的控制器中声明:
angular.module('demoApp', ['ui.router'])
.controller('appCtrl', function($scope, $stateParams, $state){
$scope.goToPath = function ( path, pid ) {
alert(path + ' ' + pid);
$scope.pid = pid;
$state.go(path, {projectId : pid} );
};
})
.config(routes);
function routes($urlRouterProvider, $stateProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('detail', {
url: '/detail',
params : { projectId : null},
template: '<div ng-init="getProjectById()">ok</div>',
title: 'Detail du projet',
controllerAs: 'detail',
controller: function($scope, $stateParams){
$scope.getProjectById = function () {
alert($stateParams.projectId)
}
}
});
}
I jsfiddled the solution here.
使用此代码,您可以获取projectId
,然后将其传递给您的服务。