angularjs ui-router将表单字段中的动态数据传递给resolve

时间:2015-04-25 21:17:01

标签: angularjs angular-ui-router

我正在尝试使用resolve以确保在屏幕上显示视图状态之前已加载数据。此解析取决于用户在之前状态下所做的选择。

因此,我需要使用参数执行get请求。

问题是我不知道如何在应用程序中设置参数。我试过了

.get('https://.../questions', {params: {gender: $scope.user.gender}})
.get('https://.../questions', {params: {gender: user.gender}})
.get('https://.../questions', {params: {gender: vm.user.gender}})

唯一有效的是:

.get(' https://.../questions',{params:{性别:'男'}})

下方更大的代码段,以提供一些背景信息。

 .state('questionnaire', {
    url: '/questionnaire',
    templateUrl: 'templates/questionnaire.html',
    controller: "QuestionnaireController as vm",
    resolve: {
      practice:  function($http){
        return $http
          .get('https://.../...')
          .then (function (data) {
            return data;
          });
      }
    }
  })
  .state('questionnaire.consent', {
    url: '/consent',
    templateUrl: 'templates/questionnaire-consent.html'
  })
  .state('questionnaire.questions', {
    url: '/questions',
    templateUrl: 'templates/questionnaire-questions.html',
    resolve: {
      questions:  function($http, $scope) {
        return $http


  // Failed Attempts
  //      .get('https://.../questions', {params: {gender: $scope.user.gender}})
  //      .get('https://.../questions', {params: {gender: $scope.user.gender}})
  //      .get('https://.../questions', {params: {gender: user.gender}})
  //      .get('https://.../questions', {params: {gender: vm.user.gender}})

  // Works but incorrectly hard coded

  //      .get('https://.../questions', {params: {gender: 'Male'}})

          .then (
            function (res) {
              console.log(res.data);
              return res;
            },
            function(errors) {
              console.log('Errors', errors);
            }
          );
      }
    }
  })

1 个答案:

答案 0 :(得分:1)

使用$stateParams服务。 它允许您将参数传递给您的状态,例如,您可以将性别作为参数传递:

.state('questionnaire.questions', {
  url: '/questions/:gender', // Gender is the parameter.
  templateUrl: 'templates/questionnaire-questions.html',
  resolve: {
    questions:  function($http, $scope, $stateParams) {
      // $stateParams.gender is the gender that was given in the url.

使用href时,您可以将性别作为参数:example.com/questions/male 或者使用$state.go的第二个参数:$state.go('questions', {gender: 'male'});

ui-router documentation中了解它。