2016-04-04 15 views
0

Çoklu denetleyicileri olan bir açısal modül için $ kapsamını nasıl oluştururum? Şu anda, aşağıdaki hata iletisi alıyorum:

Error: [$injector:modulerr] Failed to instantiate module hello due to: 
[$injector:modulerr] Failed to instantiate module navigation due to: 
[$injector:modulerr] Failed to instantiate module $scope due to: 
[$injector:nomod] Module '$scope' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument. 

şöyle uygulamanın yapısı şöyledir:

'use strict'; 
/** * Main module of the application. */ 
angular 
.module('hello', ['ngAnimate', 'ngRoute', 'ngTouch', 'auth', 'home',  
        'secure', 'public1', 'navigation', 'ui.bootstrap' ]) 
.config(function ($routeProvider, $httpProvider, $locationProvider) { 
    //a bunch of config stuff like routeProvider, etc. 
}) 
.run(['$cookies', function($cookies) { 
    //some startup stuff like setting default values for cookies, etc. 
}]); 

navigation.js olarak tanımlanır:

hello modül olarak tanımlanır:

'use strict'; 
angular 
.module('navigation', ['$scope', 'auth', 'modalService', 'ngRoute', 'ngAnimate', 'ui.bootstrap']) 
.controller('navigation', function($scope, auth, modalService, $route, $uibModal) { 
    // code for various stuff, 
    // including code calling the second controller below 
    $scope.someVariable = 'some value'; 
}); 

// Please note that $uibModalInstance represents a modal window (instance) dependency. 
// It is not the same as the $uibModal service used above. 
angular.module('navigation', ['$scope', '$uibModalInstance', 'items']) 
.controller('ModalInstanceCtrl', function ($scope, $uibModalInstance, items) { 
    //code that is controlled by code from the preceding controller 
    $scope.someOtherVariable = 'some other value'; 
}); 

Not

'$scope' is not defined. 
+1

Sadece açısal 'modül' sadece önyükleme uygulaması sırasında DI dizi içinde enjekte edilebilir .. mümkün değil $ kapsam bağımlılığı enjekte edilir .. $ kapsam sadece içinde kullanılabilir denetleyici ve yönerge bağlantı işlevi –

+0

, bağımlılık olmadığından $ kapsamı enjekte edemezsiniz. Kapsam, denetleyici içinde kullanılabilmesi için açısal olarak verilir. – Rishab777

+0

@PankajParkar Tamam, peki o zaman işe almak için OP'deki kodu nasıl değiştirebilirim? Sadece bir örneklemdeki kodu denemek istiyorum, böylece onu diğer konfigürasyonlara taşıyabilirim. – CodeMed

cevap

0

Denetleyicilerinizi başlatılıyor birkaç hatalar vardır: Ben iki çizgi $scope.someVariable = 'some value' ve $scope.someOtherVariable = 'some other value' de hata aşağıdaki almak aşağıdaki yorum uyarınca enjeksiyon dizilerden $scope ove

Bu kod:

angular.module('navigation', ['$scope', '$uibModalInstance', 'items']) 
.controller('ModalInstanceCtrl', function ($scope, $uibModalInstance, items){ 
    //code that is controlled by code from the preceding controller 
}); 

aşağıdaki şekilde yeniden yazılabilir olmalı:

angular.module('navigation', []) 
.controller('ModalInstanceCtrl', [ '$scope', '$uibModalInstance, 'items', 
    function($scope, $uibModalInstance, items) { // go with your code here 
}]); 

Temel olarak, denetleyici ile ilgili tüm enjeksiyonlarınızı modül örneğinden çıkarmanız ve denetleyiciye bir tane olarak ayarlamanız gerekir.

+0

Hayır. ** Bu, soruyu cevaplamıyor. ** OP'ye eklediğim, '$ kapsamının tanımlanmadığını' belirten maddelere bakın. – CodeMed

1

Burada karıştırdığınız iki kavram var. Açısal modülünüzün (app) bağımlılık listesini açıklamak ve bunları kontrolörünüze veya fabrikanıza enjekte etmek.

angular.module('myMoudle', ['anotherModule', 'andAnotherModule']) 

kontrolör/fabrika işlevinde yapılır denetleyicisi veya fabrikaya onlara enjekte ederken:

myModule.controller('MyController', ['$scope', 'anotherModule', function($scope, anotherModule) {}); 

Not burada MyModule zaten tanımlanır ve modülü ile bağımlılık bildirilmesi

kullanılarak yapılır Yeniden tanımlamak için bir neden yok. Ayrıca bu sözdizimini kullanarak zaten tanımlanmış modülünüze erişebilirsiniz:

angular.module('myModule', []).controller(...) 

Bağımlılık modüllerini enjekte etmenin daha ileri bir yolu, $ inject kullanıyor. hakkında daha fazla bilgi hakkında Angular DI hakkında daha fazla bilgi here

+0

Yanıtladığınız için teşekkür ederiz. Açıklık amacıyla. Modül ve kontrolör isimlerini OP'den kullanabilir misiniz? Bu, önerinizi gerçekten test etmemi sağlar. – CodeMed

+0

Bir çalışma ortamında test edip bir fiddle – MKoosej

+0

OK gönderirim. Bir yönüyle "navigasyon" kontrolörünün "modalInstanceCtrl" yi nasıl görebileceğidir. Ben de devbox'ımla birlikte sürünüyorum. – CodeMed

İlgili konular