tuchk4 / requirejs-angular-loader

Provide requirejs plugins for loading angular components
40 stars 6 forks source link

Вызов контроллера из другого модуля #1

Closed dftpnd closed 10 years ago

dftpnd commented 10 years ago

Скажите пожалуйста, возможно ли записать в текущий модуль контроллер из другого модуля?

tuchk4 commented 10 years ago

Да, вы моежете оформить controller просто как функцию:

define(function(require({
 return ['$scope', function($scope)(){
 }];
});

тогда вы уже сами добавляете его в любой модуль

var controller = require('controller!module_name:controller_name');
var module = require('module!another_module_name');
module.controller('controller.name', controller);

Но в примерах controller добавляется сразу в модуль.

define(function(require({
  var module = require('module!@'); // require current module
  module.controller('controller.name', ['$scope', function($scope)(){
    })
  ]);
});
dftpnd commented 10 years ago

А это вообще нормально? Тоесть данный подход?

tuchk4 commented 10 years ago

Зависит от многих факторов - от архитектуры проекта, от самой задачи и так далее. В большинсвте случаев вообще не важно, в каком модуле будет конроллер, но это тоже не верно. Но вообще - это не верно в модуль добавлять конроллеры из другого модуля. Модуль должен быть не зависим от других модулей.

Вы можете описать задачу, и уже будет более понятно, что ОК а что не ОК :)

dftpnd commented 10 years ago

На данный момент, я имею: 4 модуля, которые зависят от одного контроллера в первом модуле. Контроллер довольно сильно разросса, и я от него постоянно наследуюсь. Если попробовать применить пример который вы описали, то таким же же образом придется объявлять все сервисы, которые я использую в этом контроллере, что довольно не удобно. Я в тупике

tuchk4 commented 10 years ago
  1. Не нужно все сервисы так описывать. Только контроллер.
  2. Зачем контроллер добавлять вдругой модуль?
  3. По идеи если вы неследуете базовый контроллер он у вас уже объявлен как отдельная функция, а не контролллер ангулара.

К исходникам есть доступ?

dftpnd commented 10 years ago

К сожалению исходники закрыты. Наследование происходит таким образом:

<div ng-controller="MainController" >
    <div ng-controller="NextController"></div>
</div>

Наверно я ввел ввас в заблужнени назвав это "наследованием"

tuchk4 commented 10 years ago

Ну так а откуда берется проблема, в каком модуле (в смысле модуле ангулара) a у вас будет контроллер? Он может быть хоть в отдельном модуле. Главное что бы этот модуль был подключен в приложение при бутсрапе ангулара.