如何在angular-ui-router中的$ state.go()中传递自定义数据?

vic*_*woo 19 angularjs angular-ui-router

我想通过$state.go()UI-Router 将自定义对象传递给另一个状态.

var obj = {
    a: 1,
    b: 2,
    fun: function() {
        console.log('fun');
    }
}
$state.go('users', obj);
Run Code Online (Sandbox Code Playgroud)

但是我需要fun()在目标状态下运行,所以我不能在URL参数中传递这个对象.在目标控制器中,我试图获取objvia 的值,$stateParams但得到了空对象{}:

function UserCtrl($stateParams) {
    console.log($stateParams); // will be empty
}
Run Code Online (Sandbox Code Playgroud)

那么如何obj正确地传递到状态"用户"呢?

小智 68

使用如下参数定义状态:

$stateProvider
.state('user', {
   url: '/user',
   params: {
     obj: null
   },
   templateUrl: 'templates/user.html',
   controller: 'UserCont'
})
Run Code Online (Sandbox Code Playgroud)

在调用pass参数时,如下所示:

$state.go('user',{obj: myobj});
Run Code Online (Sandbox Code Playgroud)

在控制器UserCon接收参数如:

$state.params.obj
Run Code Online (Sandbox Code Playgroud)

User $ state是控制器中定义的参数之一

function UserCon($scope, $http, $state){
Run Code Online (Sandbox Code Playgroud)


Deb*_*der 3

var obj = {
   a: 1,
   b: 2,
   fun: function() {
       console.log('fun');
   }
}
$state.go('users', obj);
.....

$stateProvider
.state('user', {
   url: '/user/:obj',
   templateUrl: 'templates/user.html',
   controller: 'UserCont'
})

..... or .....

$stateProvider
.state('user', {
   url: '/user',
   params: {
     obj: null
   },
   templateUrl: 'templates/user.html',
   controller: 'UserCont'
})

.....

function UserCtrl($state) {
   console.log($state.params.obj);
}
Run Code Online (Sandbox Code Playgroud)