$ stateParms

时间:2016-12-30 23:12:41

标签: javascript angularjs

我有$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所以通常它应该有一个值,不是吗?    有人可以解释一下,它会非常感激。感谢

1 个答案:

答案 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,然后将其传递给您的服务。