【问题标题】:AngularJS Base Controller load moduleAngularJS 基础控制器加载模块
【发布时间】:2015-11-17 17:31:21
【问题描述】:

我有一个 baseController 和一个 childController

每当我向 baseController 添加模块时,应用程序都会失败并出现错误:

Argument 'childController' is not a function, got undefined

编辑:添加了一个 plnkr http://plnkr.co/edit/mi9Ytv0HaqE47ENod4Gn

所以这行得通:

angular
    .module('app')
    .controller('BaseController', baseController);

angular
    .module('app', ['ui.grid', 'ui.grid.pagination'])
    .controller('ChildController', childController)         

childController.$inject = ['$controller'];

function childController($controller) {
    var self = this;

    var baseController = $controller('BaseController', {
        $scope: self
    });

但是下面这个工作:(注意在baseController模块部分添加'ui.bootstrap'......)

angular
    .module('app', ['ui.bootstrap'])
    .controller('BaseController', baseController);

angular
    .module('app', ['ui.grid', 'ui.grid.pagination'])
    .controller('ChildController', childController)         

childController.$inject = ['$controller'];

function childController($controller) {
    var self = this;

    var baseController = $controller('BaseController', {
        $scope: self
    });

【问题讨论】:

  • 我很惊讶第一个示例可以正常工作。你确定吗?
  • 嗯,首先要注意的是您实际上覆盖了app 模块。参见documentation,“创建与检索”部分
  • 是的,我确信上面的第一个条目有效 = 这是一个 plunker plnkr.co/edit/mi9Ytv0HaqE47ENod4Gn
  • 我认为 Ilya Luzyanin 在某种程度上是正确的......但我不明白在这种情况下如何获得我正在寻找的继承......

标签: angularjs model-view-controller


【解决方案1】:

您定义了两次app 模块。我不够聪明,无法确定发生了什么,但它可能看起来应该是这样的:

angular
    .module('app', ['ui.grid', 'ui.grid.pagination'])
    .controller('BaseController', baseController)
    .controller('ChildController', childController);

【讨论】:

    【解决方案2】:

    对于继承,您可以使用标准的 JavaScript 继承模式。这是一个使用 $injector 的演示。

    function Parent($scope) {
      $scope.name = 'Human';
      $scope.clickParent = function() {
        $scope.name = 'Clicked from base controller';
      }    
    }
    
    function Child($scope, $injector) {
      $injector.invoke(Parent, this, {$scope: $scope});
      $scope.name = 'Human Child';
      $scope.clickChild = function(){
        $scope.clickParent();
      }       
    }
    
    Child.prototype = Object.create(Parent.prototype);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 2012-10-18
      • 2017-04-15
      • 2014-10-20
      • 1970-01-01
      相关资源
      最近更新 更多