Я хочу иметь модуль Angular
и главный контроллер. затем некоторые другие контроллеры, которые живут в других файлах.
Основной модуль:
var app = angular.module("main", []);
app.controller("mainCtrl", function ($scope) {
$scope.method1 = function (name) {
}
}
И это еще один контроллер внутри отдельного файла:
var app = angular.module("main");//without []
app.controller("textCtrl", function ($scope) {
$scope.method1(); //it works and i call method1 from mainCtrl(separate file)
});
Я загружаю эти файлы следующим образом:
<script src="/app.js"></script>
<script src="/secondapp.js"></script>
Моя проблема заключается в том, что внутри второго контроллера я могу вызвать метод внутри основного контроллера, но я не могу вызвать метод внутри второго контроллера с основного контроллера.
Вся структура работает, но эта проблема меня беспокоит.
В конце я хочу иметь отдельные файлы для каждого контроллера, которые все живут внутри одного и того же модуля и могут совместно использовать $ scope и другие переменные в обоих файлах.
Другой подход заключается в использовании сервисов. Но проблема в том, что в главном контроллере мне нужно ввести имя службы из второго контроллера, а иногда я не загружал второй контроллер и впрыскивал это имя, вызывая ошибку.
Мне нужна хорошая структура для этого.
данные могут использоваться совместно с услугами между двумя или более контроллерами. Если вы хотите иметь такую же область, вам нужно иметь данные в $ rootScope.
Другая проблема, которую вы здесь говорите, может быть решена путем первой загрузки js файла с заданным угловым приложением и последующей загрузкой других файлов. В других файлах вам не нужно переопределять угловое приложение (angular.module), как вы это делали выше.
Похоже, у вас есть дочерние родительские контроллеры,
<div ng-controller="mainCtrl">
<div ng-controller="textCtrl">
</div>
</div>
то textCtrl
может вызывать функции mainCtrl
родительского контроллера или также иметь доступ к родительским переменным. и свойства дочернего контроллера не видны родительскому контроллеру.
это не имеет значения, два контроллера в отдельных файлах, потому что все они связаны через var app
.
для связи между контроллерами существует много способов ссылаться на этот пост
используя service
и emitting an event
.