如何在Angularjs $ state.go中发送参数?

时间:2017-04-07 11:20:25

标签: javascript angularjs angular-ui-router

我正在开发AngularJS应用程序。我正在尝试将$state.go中的值发送到不同的州。我正在尝试如下。

这是我的状态:

$stateProvider
.state('Registration.OTPVerification', {
    url: '/RegistrationOTPVerification',
    templateUrl: 'Registration/RegistrationOTP.html',
    controller: 'RegistrationOTPVerification'
});

我正在尝试如下。

var customerid = response.data.ID;
var OTP = response.data.OTP;
$state.go('Registration.OTPVerification', customerid,OTP);

我正在尝试接收以下控制器中的参数。

(function () {
    angular.module('RoslpApp').controller('RegistrationOTPVerification', ['$scope', '$http', '$translatePartialLoader', '$translate', '$state', function ($scope, $http, $translatePartialLoader, $translate, $state, $stateParams) {
        var customerid = $stateParams.customerid;
        var OTP = $stateParams.OTP;
        alert(customerid);
    }]);
})();

我无法接收参数。任何帮助,将不胜感激。谢谢。

5 个答案:

答案 0 :(得分:10)

您需要将params作为state才能通过$stateProvider .state('Registration.OTPVerification', { url: '/RegistrationOTPVerification', params: { customerid: null, OTP: null }, templateUrl: 'Registration/RegistrationOTP.html', controller: 'RegistrationOTPVerification' }); 发送。像这样:

$state.go

现在,您可以使用$state.go('Registration.OTPVerification', { customerid: 123, OTP: 2323 }); ,如下所示:

$stateParams.customerid

最后,您可以按照使用$stateParams.OTP$stateParams的方式访问它们,但要确保注释$state就像$translate<div [style.transform]="'translateX(' + x + 'px)'"> 一样注入。

答案 1 :(得分:0)

链接 - https://ui-router.github.io/ng1/docs/0.3.1/index.html#/api/ui.router.state。$ state

语法 - go(to,params,options) params - 将发送到州的参数映射,将填充$ stateParams

$stateProvider.state('Registration.OTPVerification', {
    url: '/RegistrationOTPVerification/:data',
    templateUrl: 'Registration/RegistrationOTP.html',
    controller: 'RegistrationOTPVerification'
});

$state.go('Registration.OTPVerification', response);

(function () {
   angular.module('RoslpApp').controller('RegistrationOTPVerification', ['$scope', '$http', '$translatePartialLoader', '$translate', '$state', function ($scope, $http, $translatePartialLoader, $translate, $state, $stateParams) {
        var customerid = $stateParams.data.ID;
        var OTP = $stateParams.data.OTP;
        alert(customerid);
    }]);
})();

答案 2 :(得分:0)

只需使用$state.go

$state.go('Registration.OTPVerification',
    {
     customerid: response.data.ID,
     OTP: response.data.OTP
    });

您还需要在$stateProvider.state中将url参数定义为:

$stateProvider
 .state('Registration.OTPVerification', {
    url: '/RegistrationOTPVerification',
    params: {
        customerid: '',
        OTP: ''
    },
    templateUrl: 'Registration/RegistrationOTP.html',
    controller: 'RegistrationOTPVerification'
});

这是更新的控制器以获取参数:

(function () {
    angular.module('RoslpApp').controller('RegistrationOTPVerification', ['$scope', '$http', '$translatePartialLoader', '$translate', '$state', '$stateParams', function ($scope, $http, $translatePartialLoader, $translate, $state, $stateParams) {
        var customerid = $stateParams.customerid;
        var OTP = $stateParams.OTP;
        alert(customerid);
    }]);
})();

答案 3 :(得分:0)

Try this.
   $stateProvider
   .state('Registration.OTPVerification', {
    url: '/RegistrationOTPVerification',
    params: {
          customerid: null,
          OTP:null
          },
   templateUrl: 'Registration/RegistrationOTP.html',
   controller: 'RegistrationOTPVerification'
  })

调用pass参数时:

 $state.go('Registration.OTPVerification',{customerid: "gfdg",OTP:"4545"});

答案 4 :(得分:0)

我想加两分钱。上面的解决方案中有一个问题会导致其他问题。我在各州使用views,并且将params($ stateParams)放在views中,但是它没有用。 params必须存在于状态控制器的根级别。我不确定是否可以通过views下列出的值...以及是否可以通过/检索值。

这是我的初始状态控制器定义:

  .state('tab.clubs', {
      cache: true,
      url: '/clubs',
      views: {
        'tab-clubs': {
          templateUrl: 'templates/tab-clubs.html',
          controller: 'ClubCtrl',
          params: {
           'refreshClubs' : 0,
           'pushAction' : 0,
           'pushSub' : null,
           'pushMsg' : null,
           'pushCode' : null
         }
        }
      }
    })

然后进入控制器:

var payload = {
   'pushAction' : 1,
   'pushSub' : "blah",
   'pushMsg' : "more blah blah",
   'pushCode' : code
}
$state.go('tab.clubs',payload) ;

它将路由到正确的控制器/页面,但未传递任何参数。直到我将状态提供程序更改为以下内容:

  .state('tab.clubs', {
      cache: true,
      url: '/clubs',
      params: {
        'refreshClubs' : 0,
        'pushAction' : 0,
        'pushSub' : null,
        'pushMsg' : null,
        'pushCode' : null
      },
      views: {
        'tab-clubs': {
          templateUrl: 'templates/tab-clubs.html',
          controller: 'ClubCtrl'

        }
      }
    })