2014-10-31 12 views
8

ile bir denetleyici yüklemek $ stateProvider ile oclazyload kullanarak sorunları yaşıyorum.

Denetleyicinin .js'nin yönlendirici yapılandırmasına yüklenmesi gerektiğini belirtti ve '', ancak, templateURL'de yüklenen dosyada bir ng denetleyicisi özniteliği olarak kullanılamıyor.

ui-rota yapılandırma:

<div class="" id="" ng-controller="OrdersIndexController">...</div> 

Ama yüklediğinde, konsol hata atar:

core 
.run(
    [     '$rootScope', '$state', '$stateParams', 
     function ($rootScope,  $state,  $stateParams) { 
       $rootScope.$state = $state; 
       $rootScope.$stateParams = $stateParams;    
     } 
    ] 
) 
.config(
    [     '$stateProvider', '$urlRouterProvider', 
     function ($stateProvider,  $urlRouterProvider) { 
      console.info('Routing ...'); 
      $urlRouterProvider 
       .otherwise('/app/dashboard'); 

      $stateProvider 
       .state('app', { 
        abstract: true, 
        url: '/app', 
        templateUrl: 'templates/app.html', 
       }) 
       .state('app.orders', { 
        abstract: true, 
        url: '/orders', 
        templateUrl: 'templates/orders/orders.html', 
       }) 
       .state('app.orders.index', { 
        url: '/index', 
        templateUrl: 'templates/orders/index.html', 
        resolve: { 
         deps: ['$ocLazyLoad', 
          function($ocLazyLoad){ 
           console.info('Path ot order controller in route config',Momento.paths.js + 'controllers/orders/index.js'); 
           return $ocLazyLoad.load([ 
             Momento.paths.js + 'controllers/orders/index.js' 
           ]) 
          } 
         ] 
        } 
       }) 
     } 
    ] 
) 
; 

Ve templateURL dosya başlar

<info>orders/index controller loaded controllers/orders/index.js:3 
<info>Now I've finished loading the controller/order/index.js config/ui-router.js:69 
<info>orders template loaded VM30437:1 (<-- this is the app.orders abstract template with ui-view directive ready for app.orders.index view) 
<error>Error: [ng:areq] Argument 'OrdersIndexController' is not a function, got undefined 
... <trace> 

Yani dosyasıdır yukardaki konsol çıktısı tarafından onaylanan ve geliştirici araçlarındaki ağ sekmesi tarafından doğru şekilde yüklenen, ancak mevcut değil controller olarak kullanmak için templateURL içinde? Denetleyiciyi kullanarak yönlendirici yapılandırmasında takma gereksinimi duyuluyor mu: '' anahtarı mı yoksa şablonda mı? Bu uygulamada (sadece) modüle özel olarak bağlanması gerekiyor mu?

Neyi eksik?

PS:

core 
.controller('OrdersIndexController', [ 
         'Model', '$scope', '$window', 
    function( Model,  $scope,  $window){ 
     console.info("OrdersIndexController fired"); 
    } 
]); 
+0

Eğer sorunu çözmek Could Çalışmıyor? Benzer bir sorun var gibi görünüyor. – Sjoerd222888

+0

Hayır, bu projedeki sorunu çözemedim. NOT: Eğer kontrol üniteniz başka bir modülün parçasıysa, Filippe'den gelen yayın iyi olur ... ama eğer modülünüzün kendi modülü gibi çalışmamışsa, bu durum zaten açıklanmış ve yüklenmiştir. Belki de ocLazyLoad ekleyebilir veya uzatabilir ve yeniden yükleyebilir, emin değilim, ama artık Angular fazla kullanmıyorum. Şimdi Ember'i tercih ederim. –

cevap

5
Fonksiyonun içerisinde

function($ocLazyLoad){} Eğer denetleyici ve tembel yüke" dosyasının adını içeren modülün ismini ilan etmek gerekir: kumandanın adı aslında OrdersIndexController olduğunu doğrulayan "

function($ocLazyLoad){ 
    return $ocLazyLoad.load(
     { 
      name: 'module.name', 
      files: ['files'] 
     } 
    ); 
} 
+0

@Tremendus Apps, bu durum basit, 'mainmodule.name' için 'module.name' değiştir ' –

+0

bu doğru cevap, neden bulmak zor olduğunu merak ediyorum! – ProllyGeek

+0

İşleri! Bu kadar basit ve harika çalışıyor! Cevap olarak kabul edilmeli. – Sharath

1

Eğer ocLazyLoad 1.0 -> With your router

... 
resolve: { // Any property in resolve should return a promise and is executed before the view is loaded 
loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad) { 
    // you can lazy load files for an existing module 
     return $ocLazyLoad.load('js/AppCtrl.js'); 
}] 
şu anki belgelenmiş yolu kullanırsanız

} js sonra

/AppCtrl.js

Böyle bir şey var: O

angular.module("myApp").controller('DynamicNew1Ctrl', ['$scope', function($scope) { 
    $scope.name = "Scoped variable"; 
    console.log("Controller Initialized"); 
}]); 

Not angular.module ("myApp") Eğer yeni denetleyicisi iliştiriyorsanız ile Var olan bir modül, bu durumda mainApp, böylece yeni dinamik kontrol cihazlarından herhangi biri uygulama bağımlılıklarını kullanabilir. , ancak bağımlılıklarınızı here açıklandığı şekilde yeni bir modül tanımlayabilirsiniz, daha sonra uygulamanızı bir eklenti mimarisiyle yapılandırırken yaygın olarak kullanılır ve dinamik modülleri yalıtmak istersiniz, böylece yalnızca bazı özel bağımlılıklara erişimi vardır

3

Sen

angular.module("myApp").controller

çalışma

angular.module("myApp").controller('HomePageController', ['$scope', function ($scope) { 
    console.log("HomePageController loaded"); 

}]); 
ile denetleyici kayıt var

var myApp = angular.module("myApp") 

myApp.controller('HomePageController', ['$scope', function ($scope) { 
    console.log("HomePageController loaded"); 

}]); 
+0

Cevabınız için teşekkürler! :) – forguta

İlgili konular