我有東西在這個plunker覆蓋一些usecases工作。
該函數將帶有一個參數。該參數在每個範圍內都具有相同的名稱。
<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」 VAR:
angular.module('MyApp').controller('subCtrl', function($scope, ItemService){
$scope.specificName = "I'm a sub !";
});
要呼叫純JS的功能,您可以爲此在每個控制器:
$scope.announce($scope.specificName);
編輯:
我剛剛意識到有一個其他的解決方案,可以滿足您的需求。您可以使用工廠或服務來共享該功能。
如何服務可以看看:
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每個控制器並將它傳遞給功能。但是,該功能將可用於您的應用程序的任何部分。你只需要注入的服務和
詳情:
最後抽象的部分沒有功能,但在每個控制器與您的經銷商的名稱。一種常規的命名。
如果此變量與狀態相關,則可以將其添加到狀態定義中。 (如果是這種情況,我可以嘗試給你一個例子。)
我也不建議給所有人一個完整的$範圍給另一個。這在角度上不是一個好習慣。
希望這能解決您的問題,或者提供足夠的線索。
隨意問更具體的事情,我會編輯答案,以適應您的需求。
你可以添加一些你的函數的用例嗎? (您是否在ng-click?內使用其他函數?等等) – Okazari
您始終可以使用工廠和事件發射器在控制器之間進行通信。我有一個菜單控制器,每次登錄或註銷時都會更新,或者添加一些東西到購物籃中,類似的東西......我不知道這是否與此相同? –