如何在$ state angularjs中的控制器之间使用ui路由器传递对象

时间:2015-01-22 14:20:46

标签: angularjs angular-ui-router

我正在使用this generator

我有我的用户模块:

require('angular/angular');
require('angular-ui-router');


angular.module('userModule', ['ui.router'])
    .config(['$stateProvider', function($stateProvider) {


    $stateProvider
        .state('utenti', {
            url: '/utenti',
            templateUrl: 'src/utenti/views/utenti.tpl.html',
            controller: 'RegistrationCrl',    
        })

        .state('access', {
            url: '/access',
            templateUrl: 'src/utenti/views/access.tpl.html',
            controller: 'AccessCtrl',
        });


}])
.controller('RegistrationCrl', require('./controllers/registrationLogin'))
.controller('AccessCtrl', require('./controllers/access'));

在我的RegistrationCrl中,我使用服务来创建一个新成员:

module.exports = function($scope, User, Member, $state, $location,$rootScope, $stateParams){
        $scope.registration = function(form){
            if(!form.$valid ){
                console.log('input error');
                return;
            }
            else{
                console.log('valid form');

                Member.create($scope.newMember,
                    function(data){
                        $state.go('access', data); 
                    },
                    function(data){
                        console.log(data);
                    }
                );

            }
        };
    };

我想在下一个与accessCtl相关的视图中使用该数据。我不想在我的网址中使用ID并使用$ stateParams。

我的门禁控制器是:

module.exports =  function($scope, User, Member, $state, $rootScope, $stateParams){
        console.log($state);
        console.log($stateParams);
    };

在那个console.log中,我发现我的对象是通过$ state.go传递的。

3 个答案:

答案 0 :(得分:10)

您可以使用$ stateParams将数据传递到下一个视图。 在目标路线中添加参数

 $stateProvider
    .state('utenti', {
        url: '/utenti',
        templateUrl: 'src/utenti/views/utenti.tpl.html', 
        params: { myParam: null},
        controller: 'RegistrationCrl',    
    })

将数据传递到下一个视图

  $state.go("utenti",{myParam:{"data":"data"}})

在下一个控制器中获取数据

         $scope.paramDetails=$stateParams.myParam; 

答案 1 :(得分:0)

我的理解是你不能将状态之间的对象作为参数传递。一种选择是使用service,它可以被您注入的所有控制器访问。

对于共享service Passing data between controllers in Angular JS?

,SO上已有一个很好的答案

答案 2 :(得分:0)

使用ui.router的解析声明

 resolve:{
      data: ['$stateParams', function($stateParams){
          return $stateParams.data;
      }]