2013-09-19 21 views
11

Tôi đã tình trạng sau thành lập:Làm thế nào tôi có thể làm cho ui-router của tôi đi đến một trạng thái khác với bộ điều khiển của tôi?

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' 
      }, 

     } 
    } 

và:

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

Khi tôi đi trình đơn của tôi với/câu hỏi sau đó bộ điều khiển nhận được một danh sách các câu hỏi và populates đối tượng $ 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); 
      }); 

Sau này tôi muốn để chuyển đổi sang đầu tiên trong danh sách vì vậy tôi mã:

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

Tuy nhiên khi tôi theo dõi này nó chỉ nằm trong một vòng lặp infinte và nó không đi đến mới/question/5 (khi 5 là câu hỏiHeaders [0] .questionId).

Ai đó có thể cho tôi một số lời khuyên về cách tôi có thể chuyển đổi sang/câu hỏi/5 không? Tôi hạnh phúc nếu nó đi đến trình duyệt mới href nhưng tôi cần phải mã trực tiếp (làm thế nào) hoặc có thể ui-router làm điều này cho tôi?

Trả lời

32

Bạn có thể tiêm dịch vụ $ state và gọi nó là phương thức transition (go).

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

@ câu hỏi Cody:

Bạn cũng có thể tiêm $ stateParams vào điều khiển của bạn và đi đến một nhà nước với args:

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

Đó chính xác là những gì tôi đã làm trong đoạn code trên nhưng không xảy ra. Khi tôi gỡ lỗi trên dòng đó, nó được nhấn lặp đi lặp lại trong một vòng lặp. –

+0

Bạn có thể thực hiện một plunkr ra nếu tôi có thể kiểm tra nó? Có lẽ đường dẫn đến các mẫu của bạn là sai? –

+0

Ngoài ra, là QuestionsContentController của bạn trong cùng một module/reachable và hiện nó tồn tại? –