2015-04-10 2 views
4

Я пытаюсь отделить некоторые общие функции между некоторыми из моих контроллеров в родительском контроллере. Я хотел бы сделать это, используя какое-то наследование, а не какое-то обслуживание. Все примеры, использующие функцию $injector.invoke, зависят от функции-конструктора родителя в области видимости. Нравится это: http://plnkr.co/edit/kva82QyytKQfOafGiVxL?p=preview.angular get controller constructor

Поскольку у меня есть все мои контроллеры в отдельных файлах, я хотел бы сделать что-то вроде этого:

Родитель контроллер имеет свой собственный модуль:

angular.module('app.parent').controller('ParentCtrl', function() { 
    this.someMethodProvidedbyParent = .... 
}); 

Контроллер ребенок расширяет ParentCtrl с помощью $injector.invoke , Как получить ParentCtrl?

angular.module('app.parent.child').controller('ChildCtrl', function($injector) { 

    // Somehow need to get ParentCtrl from the angular module 'app.parent' 
    $injector.invoke(ParentCtrl, this, {}); 
}); 

Я предполагаю, что я мог бы просто поместить ParentCtrl в какой-либо объект на глобальном масштабе, но я предпочел бы использовать угловую модульную систему.

+0

Вы можете использовать зависимость '$ controller',' $ controller ('ParentCtrl', {this: this}); 'должен работать в дочернем контроллере –

+0

Не работал, когда я пытался. – qzr

ответ

3

Хорошо мне удалось сделать это с инстанцированием родительского контроллера, а затем с помощью angular.extend так:

app.controller('ChildCtrl', function($controller) { 
    angular.extend(this, $controller('ParentCtrl')); 

    // Overriding methods here (after extending `this`) 
}); 

Свойства родителя копируется this.

+1

Nice appoarch .. +1 не думал об этом –

Смежные вопросы