2014-10-29 3 views
5

angleUI 라우팅 설정에서 다음 조각을 고려하십시오. 나는 경로/카테고리/관리/4/세부 사항 (예를 들면)으로 항해 중입니다. 관련 컨트롤러가로드되기 전에 'category'가 해결되기를 기대하며 실제로 카테고리 서비스에서 카테고리를 반환하고 카테고리가 반환 된 것을 확인하는 resolve 함수 내에 중단 점을 넣을 수 있습니다. 이제 컨트롤러 자체에 또 다른 중단 점을 두는 것은 '범주'가 항상 정의되지 않은 것을 볼 수 있습니다. 그것은 UI 라우터에 의해 주입되지 않습니다.주입 된 매개 변수를 해결하지 않는 각도 UI 라우터

누구든지 문제를 볼 수 있습니까? 제공 한 코드 이외의 다른 위치에있을 수 있지만 코드를 실행할 때 오류가 없으므로 문제의 원인을 알 수는 없습니다. 전형적인 js 침묵의 실패!

 .state('category.manage', { 
      url: '/manage', 
      templateUrl: '/main/category/tree', 
      controller: 'CategoryCtrl' 
     }) 
     .state('category.manage.view', { 
      abstract: true, 
      url: '/{categoryId:[0-9]*}', 
      resolve: { 
       category: ['CategoryService', '$stateParams', function (CategoryService, $stateParams) { 
        return CategoryService.getCategory($stateParams.categoryId).then(returnData); //this line runs before the controller is instantiated 
       }] 
      }, 
      views: { 
       'category-content': { 
        templateUrl: '/main/category/ribbon', 
        controller: ['$scope', 'category', function ($scope, category) { 
         $scope.category = category; //category is always undefined, i.e., UI router is not injecting it 
        }] 
       } 
      }, 
     }) 
      .state('category.manage.view.details', { 
       url: '/details', 
       data: { mode: 'view' }, 
       templateUrl: '/main/category/details', 
       controller: 'CategoryDetailsCtrl as details' 
      }) 

답변

13

개념이 작동 중입니다. 나는 working plunker here을 만들었습니다.

.factory('CategoryService', function() {return { 
    getCategory : function(id){ 
    return { category : 'SuperClass', categoryId: id }; 
    } 
}}); 

경우에도 : 변화는 여기에 대신이

resolve: { 
    category: ['CategoryService', '$stateParams', function (CategoryService, $stateParams) { 
     //this line runs before the controller is instantiated 
     return CategoryService.getCategory($stateParams.categoryId).then(returnData); 
    }] 
}, 

난 그냥주는 getCategory의 결과를 반환의

... 순진 서비스 구현

resolve: { 
    category: ['CategoryService', '$stateParams', function (CategoryService, $stateParams) { 
     return CategoryService.getCategory($stateParams.categoryId); // not then 
    }] 
}, 

입니다 그것은 약속 일 것입니다 ... 해결은 그것이 처리 될 때까지 기다릴 것입니다 ...

.factory('CategoryService', function($timeout) {return { 
    getCategory : function(id){ 
    return $timeout(function() { 
     return { category : 'SuperClass', categoryId: id }; 
    }, 500); 
    } 
}}); 
+1

고마워요! 확실히 맞아. 이상한 부분은 $ http 서비스와 함께이 구문을 사용하고 있었고 항상 잘 작동했기 때문에 카테고리 서비스가 약속을 되 돌리는다면 똑같이 작동 할 것이라고 생각했습니다. 그 차이점을 알아 내야 겠지만 도움을 주셔서 다시 한번 감사드립니다. 매우 감사. –

+0

이 사용법에 대한 문서가 없습니다. 이 문서에는 해결 객체에 키가 있음이 표시됩니다. 그리고 공장은 문자열이나 함수만을 받아들입니다 ... – Demonbane

+0

마침내이 솔루션으로 제 자신의 문제를 해결할 수있었습니다. 감사! –

관련 문제