传递给控制器​​后,$ stateParams未定义

时间:2017-04-18 18:50:18

标签: javascript angularjs angular-ui-router undefined

我正在使用ui-router通过

将对象传递给另一个状态和控制器
$state.go()

但$ stateParams对象的console.log显示为未定义。该对象由x和y坐标组成,这些坐标是介于0和20之间的简单整数值。当我在EnterCtrl中调用user.log时,我得到了正确的变量,因此我假设已经发送了正确的信息。

我在这里看了很多例子并尝试了很多选项,但我无法让它发挥作用。如何让$stateParams

看到CanvasCtrl

EnterCtrl使用$state.go

传递userData对象
myMap.controller('EnterCtrl',['$scope', '$state', function EnterCtrl($scope,$state){
    $scope.formData = {
        x: 0,
        y: 0
    };
    var userData = $scope.formData;
   // console.log(userData);

    $scope.goToAnswer = function(){
        console.log(userData);
            $state.go('answer', {coor: userData})  ;
        };

}]);

回答对象传递给的状态。

var answerState = {
        name: 'answer',
        url: '/answer/:coor',
        templateUrl: 'partials/answer.html',
        controller: 'CanvasCtrl',
        params: {coor: null}
    };

收到stateParams的控制器。

myMap.controller('CanvasCtrl', ['$scope','$state','$stateParams',function CanvasCtrl($scope,$state,$stateParams){

var userData = $stateParams.coor;
    // var userDataY = $stateParams.coor.y;
    //var userDataX = $stateParams.coor.y;

   console.log(userData);
}]);

https://plnkr.co/edit/lwP7DGkwHl2ZWWegazyv?p=preview

2 个答案:

答案 0 :(得分:1)

我修复了您的问题here。 基本上,我在发送之前添加了JSON.stringify将对象转换为json,否则它将打印为[object Object]

答案 1 :(得分:0)

首先创建一个工厂,设置你的状态参数值包含如下函数:

      function stateParam() { 
          var selectedRelease = "your value"
          $state.go('app.dashboard.detail.releases', {'selectedRelease': 
                    selectedRelease});
         }

将此工厂注入两个控制器。

使用工厂名称在第一个控制器中调用此函数。就像你有工厂名称一样,你可以称之为: 的 factory.stateParam()