首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Javascript中将Controller传递给Controller

在Javascript中将Controller传递给Controller
EN

Stack Overflow用户
提问于 2014-09-30 00:12:00
回答 2查看 244关注 0票数 0

我正在尝试将我的控制器传递给另一个控制器,但一直收到错误:$injector:unpr未知提供者: MchControllerProvider <- MchController

如何正确地将一个控制器注入到另一个控制器中?下面是我的代码:

本节是GroupMaintenanceBrowsePlansCtrl->

代码语言:javascript
复制
(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 ->

代码语言:javascript
复制
'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);
        ....
EN

回答 2

Stack Overflow用户

发布于 2014-09-30 01:58:49

您不能使用依赖注入将一个控制器注入到另一个控制器中,但您可以嵌套控制器并利用嵌套控制器之间的原型继承:

代码语言:javascript
复制
  <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代码:

代码语言:javascript
复制
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?

票数 1
EN

Stack Overflow用户

发布于 2014-09-30 00:28:04

您不能将一个控制器注入另一个控制器。如果两个控制器之间存在共享逻辑,则将其放入服务中并将其注入控制器中。

理想情况下,您的控制器应该尽可能地精简,并且大多数(如果可能的话)业务逻辑都应该驻留在服务中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26104270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档