2014-09-29 65 views
0

我想我的控制器傳遞到另一個控制器和我不斷收到一個錯誤:[$注射器:unpr]未知提供商:MchControllerProvider < - MchController傳遞到控制器控制器在Javascript

如何正確注入一個控制器到另一個?這裏是我的代碼:

這一部分是GroupMaintenanceBrowsePlansCtrl->

(function() { 
    'use strict'; 

    var controllerId = 'GroupMaintenanceBrowsePlansCtrl'; 

    angular.module('myApp').controller(controllerId, ['$scope', 'RenewalGroupDataService', 'logger', 'mchService', 'MchController' , Controller]); 

    function Controller($scope, datacontext, logger,mchService, MchController) { 
    logger = logger.forSource(controllerId); 

....

這一部分是MchController - >

'use strict'; 

myApp.controller('MchController', function ($scope, $routeParams, mchService, CustomerDataService, EntityInfoService, RatesDataService, RenewalGroupDataService) { 
    console.log('reached MchController'); 
    //Rout parameters as passed via App.js 
    $scope.routeParams = { 
     type: $routeParams.Type, 
     id: $routeParams.Id 
    }; 

    //Properties associated with data 
    $scope.visible = { 
     experience: true, 
     persistency: true, 
    } 

    // define view model and expose it to the scope 
    var vm = { 
     title: 'Loading MCH Name... ', 
     CustomerNumber: 'Loading MCH Number...' 
    }; 

    $scope.vm = vm; //local scope to MchController 

    vm.type = $routeParams.Type; 
    vm.id = $routeParams.Id; 
    vm.togglePlans = togglePlans; 
    vm.toggleRates = toggleRates; 
    vm.getRateInformation = getRateInformation; 
    vm.getMch6 = getMch6; 
    vm.Mch2Information = []; 
    vm.searchParameters = mchService.searchParameters; 

    function togglePlans() 
    { 
     vm.expandedPlans = !vm.expandedPlans; 
    } 

    //Puts multiple sets of Mch2 data into array to iterate through 
    vm.Mch2Information = new Array(); 
    vm.getEntityInformation = function() { 
     getEntityInformation('MCH', mchService.searchParameters); 
    } 

    //Initialize GET command for Customer Information 
    //getEntityInformation($routeParams.Type, $routeParams.Id); 

    function getEntityInformation(type, id) 
    { 
     switch (type) 
     { 
      case "MCH": getCustomerInformation(id); 
        //getMch6(); 
        getMch2Information(id); 
     .... 
+0

驗證包含MCHController定義的文件包含在您的index.html。 – 2014-09-29 16:14:45

+0

我驗證了它在index.html – user1789573 2014-09-29 16:59:59

回答

0

你不能注入控制器到另一個控制器。如果兩個控制器之間存在共享邏輯,請將其放入服務器中並將其注入控制器。

理想情況下,您的控制器應該儘可能地薄,並且業務邏輯的大部分(如果可能的話)都應駐留在服務中。

+0

因爲控制器是Javascript中的對象,並且您可以在對象上執行依賴注入,所以從邏輯上來說,可以依賴注入控制器到另一個對象(在這種情況下是控制器)。那有意義嗎? – user1789573 2014-09-29 16:59:12

+0

請參閱此鏈接瞭解可以注入或不能注入的內容http://stackoverflow.com/questions/16828287/what-things-can-be-injected-into-others-in-angular-js – 2014-09-29 17:19:54

1

你不能注入一個控制器到另一個與依賴注入,但你可以嵌套控制器,並採取嵌套控制器之間的原型繼承的優勢:

<body ng-controller="MainCtrl"> 
    <div ng-controller="ChildCtrl"> 
     <p>Hello {{name}}!</p> 
     <button ng-click="parentAction()">parent action</button> 
     <button ng-click="overriddenAction()">overriden action</button> 
    </div> 
    </body> 

JS代碼:

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 
    $scope.parentAction = function() { 
    alert('greetings from parent controller') 
    }; 
    $scope.overriddenAction = function() { 
    alert('greetings from parent controller'); 
    }; 
}); 

app.controller('ChildCtrl', function ($scope) { 
    $scope.overriddenAction = function() { 
    alert('greetings from child controller'); 
    }; 
}) 

這您可以訪問在父控制器上定義的函數和對象。或者你可以事件覆蓋這些對象或功能。

http://plnkr.co/edit/Kmi4wm3aYrOf1shpmM5D?p=preview

我建議閱讀這個問題,如果你想知道更多關於原型繼承中angularjs:What are the nuances of scope prototypal/prototypical inheritance in AngularJS?