2014-10-29 24 views
5

Bu nedenle, angularUI yönlendirme kurulumumdan aşağıdaki parçayı düşünün. Rota/kategori/yönet/4/detaylarına (örneğin) gidiyorum. İlgili denetleyicinin yüklenmesinden önce 'kategorinin' çözülmesini bekliyorum ve aslında kategori hizmetinden kategoriyi döndüren ve kategorinin döndürüldüğünü gören çözüm işlevinin içine bir kesme noktası koyabileceğim ölçüde. Şimdi denetleyicinin içine başka bir kırılma noktası koymak 'kategorisinin' her zaman tanımsız olduğunu görebiliyorum. UI yönlendirici tarafından enjekte edilmez.Köşeli UI yönlendirici enjekte edilen parametreleri çözümlemiyor

Problemi gören var mı? Sağladığım koddan başka bir yerde olabilir, ancak kodu çalıştırdığımda hatam olmadığı için, sorunun kaynağının nerede olabileceğini söylemek imkansız. Tipik js sessiz arızaları!

 .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' 
      }) 

cevap

13

Kavram çalışıyor. working plunker here'u oluşturdum.

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

bile: değişikliklerin yerine burada bu

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

Sadece getCategory sonucunu döndürdü arasında

... naif hizmet uygulaması ile

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

olduğunu Bu bir söz olurdu ... çözüm işlenene kadar bekleyecektir ...

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

Teşekkür ederiz! Kesinlikle doğru. Garip kısmı, bu sözdizimini $ http hizmetiyle kullanıyorum ve her zaman iyi çalıştı, ve kategori hizmetimin bir işe yarayacağını düşündüm. Farkın ne olduğunu bulmam gerekecek, ama yardımın için tekrar teşekkürler. Çok takdir edildi. –

+0

Bu kullanımın belgelerini görmedim. ve belgede, çözüm nesnesinin fabrikada anahtar olduğunu gösterir. ve fabrika sadece dize veya işlevi kabul eder ... – Demonbane

+0

Son olarak kendi sorunumu bu çözümle çözebildi. Teşekkürler! –

İlgili konular