2013-09-19 9 views
11

ho i seguenti stati istituiti:Come posso rendere il mio ui-router in uno stato diverso dal mio controller?

var questions = { 
     name: 'questions', 
     url: '/questions', 
     views: { 
      'menu': { 
       templateUrl: function (stateParams) { 
        return '/Content/app/questions/partials/menu.html' 
       }, 
       controller: 'QuestionsMenuController' 

      }, 
     } 
    } 
    var questionsContent = { 
     name: 'questions.content', 
     parent: 'questions', 
     url: '/:content', 
     views: { 
      '[email protected]': { 
       templateUrl: function (stateParams) { 
        var isNumber = !isNaN(parseFloat(stateParams.content)); 
        return isNumber ? '/Content/app/questions/partials/detail.html' : 
             '/Content/app/questions/partials/content.html' 
       }, 
       controller: 'QuestionsContentController' 
      }, 

     } 
    } 

e:

$stateProvider 
     .state(questions) 
     .state(questionsContent); 

Quando vado il mio menu con/domande allora il controllore ottiene un elenco di domande e popola l'oggetto $ scope.questionHeaders .

var url = '/api/Question/GetQuestionHeaders?id=0'; 
     $http.get(url) 
      .success(function (data, status, headers, config) { 
       $scope.questionHeaders = data; 
       $scope.currentQuestion = $scope.questionHeaders[0].questionId; 
       $state.transitionTo('questions.content', { content: $scope.currentQuestion }) 
      }) 
      .error(function (data, status, headers, config) { 
       alert("Error: No data returned from " + url); 
      }); 

A seguito di questo voglio transizione verso il primo della lista in modo codificato:

$state.transitionTo('questions.content', { content: $scope.currentQuestion }) 

Tuttavia quando traccio questo rimane solo in un ciclo infinte e non va per il nuovo/questions/5 (quando 5 è la domandaHeaders [0] .questionId).

Qualcuno può darmi qualche consiglio su come posso rendere la transizione a/questions/5? Sono felice se vada al nuovo browser href ma devo codificarlo direttamente (come) o posso farlo da ui-router?

risposta

32

È possibile inserire il servizio $ state e chiamare il metodo transitionTo (go).

.controller('SomeController', ['$state', function($state){ 
    $state.transitionTo('my.state', {arg:'arg'}); 
}]); 

@ domanda di Cody:

È inoltre possibile iniettare il $ stateParams nel controller e andare a uno stato con args:

.controller('SomeController', ['$state', '$stateParams', function($state, $stateParams){ 
     $state.go('my.state', {listId: $stateParams.listId, itemId: $stateParams.itemId}); 
    }]); 
+0

Questo è esattamente quello che ho fatto nel codice sopra ma niente accade. Quando eseguo il debug su quella linea, viene colpito ancora e ancora e ancora in loop. –

+0

Puoi fare un plunkr se posso provarlo? Forse il percorso per i tuoi modelli è sbagliato? –

+0

Inoltre, il tuo QuestionsContentController è nello stesso modulo raggiungibile e esiste? –

Problemi correlati