У меня есть что-то работающее в этом plunker, которое покрывает некоторые удобства.
Функция примет параметр. Этот параметр будет иметь одно и то же имя в каждой области.
<body ng-app="MyApp">
<div ng-controller="mainCtrl">
<button ng-click="announce(specificName)">announce in main</button>
<div ng-controller="subCtrl">
<button ng-click="announce(specificName)">announce in sub</button>
</div>
</div>
</body>
Вы главный вид такой же контроллер:
angular.module('MyApp').controller('mainCtrl', function($scope, ItemService){
$scope.specificName = "I'm main !";
$scope.announce = function(specificName){
alert(specificName);
}
});
И только переопределить "specificName" вар в контроллере суб:
angular.module('MyApp').controller('subCtrl', function($scope, ItemService){
$scope.specificName = "I'm a sub !";
});
Для вызова функции в чистом JS вы можете сделайте это в каждом контроллере:
$scope.announce($scope.specificName);
EDIT:
Я только что понял, что есть другое решение, которое может удовлетворить ваши потребности. Вы можете использовать фабрику или службу для совместного использования функции.
Как услуга может выглядеть:
myApp.service("AnnounceService",
function(){
var service = {};
service.announce = function(toAnnounce){
alert(toAnnounce);
}
return service;
}
);
Как ваш контроллер будет выглядеть следующим образом:
angular.module('MyApp').controller('subCtrl', function($scope, AnnounceService){
$scope.announce = AnnounceService.announce;
$scope.specificName = "I'm a sub !";
//Equivalent
$scope.announce($scope.specificName);
AnnounceService.announce($scope.specificName);
});
Это то же самое, что вам нужно объявить specificName в каждом контроллере и передать его функция. Но функция будет использоваться в любой части вашего приложения. Вам просто нужно вводить сервис и
Детали:
Наконец абстрактная часть в не функциях, но имя вашего вара в каждом контроллере. Это обычное название.
Если этот var связан с государством, вы можете добавить его в определение состояния. (Если это так, я мог бы попытаться привести вам пример.)
Я также не рекомендую вообще предоставлять полный $ scope другому. Это не очень хорошая практика в угловой.
Надеясь, что это решило вашу проблему или дало достаточное количество подсказок.
Не стесняйтесь задавать более конкретные вопросы, я отредактирую ответ, чтобы адаптировать его к вашим потребностям.
Вы можете добавить некоторые варианты использования вашей функции? (Используете ли вы его с помощью ng-click? Внутри другой функции? И т. Д.) – Okazari
Вы всегда можете использовать фабрики и эмитент событий для связи между контроллерами. У меня есть аналогичная вещь с контроллером меню, который обновляется каждый раз при входе или выходе из журналов или добавляет что-то в корзину покупок ... Я не знаю, так ли это по тому же пути? –