是否可以確定當前激活的控制器?與活躍我不是說加載,但在當前視圖層次結構中使用。確定激活的控制器
我想要做的是更新全局鍵盤快捷鍵列表,具體取決於哪些控制器當前處於活動狀態(哪些鍵盤快捷鍵可用於當前視圖)。
是否可以確定當前激活的控制器?與活躍我不是說加載,但在當前視圖層次結構中使用。確定激活的控制器
我想要做的是更新全局鍵盤快捷鍵列表,具體取決於哪些控制器當前處於活動狀態(哪些鍵盤快捷鍵可用於當前視圖)。
我認爲一種方法是使用服務來存儲活動控制器的名稱,甚至是要顯示的菜單。 每次視圖更改時,控制器都將被執行,因此您可以運行一個函數來更新服務。
Here is a fiddle有類似的情況,我使用的Menu服務爲每個視圖存儲不同的菜單,服務有一個setMenu()和getMenu(),每次執行控制器時都會通知服務哪個菜單是被激活,每當我打電話給getMenu()它將返回活動菜單。
/* Services */
app.factory('Menu', function() {
var activeMenu;
var menu = {
home: '<button>A</button><button>B</button>',
list: '<button>C</button><button>D</button>',
settings: '<button>E</button><button>F</button>',
}
function setMenu(name) {
activeMenu = name;
}
function getActiveMenu() {
return menu[activeMenu];
}
return {
setMenu: setMenu,
getMenu : getActiveMenu
}
});
/* Controllers */
function HomeCtrl($scope, Menu) {
Menu.setMenu('home');
$scope.menu = Menu.getMenu();
}
function ListCtrl($scope, Menu) {
Menu.setMenu('list');
$scope.menu = Menu.getMenu();
}
function SettingsCtrl($scope, Menu) {
Menu.setMenu('settings');
$scope.menu = Menu.getMenu();
}
是的,我們可以。
有在網絡上的兩個資源,這將幫助我們解決這個問題:所以
,因爲你可以看到,問題是anwserable只有當它是:「有沒有什麼知道哪些控制器具有活動範圍的意思」,因爲無意識知道控制器生命週期本身的任何內容。
首先,定義一個RegisterableCtrl如下(我沒有檢查的代碼,它只是對如何實現它的想法)
myApp.controller("RegisterableCtrl", function ($scope, ActiveScopesServices) {
// each time a scope is active this constructor will be called
ActiveScopesServices.add(...);
// each time a scope is removed this event receiver will be called
$scope.$on('$destroy', function dismiss() {
ActiveScopesServices.remove(...);
});
});
然後,您的應用程序的每個控制器,注入到註冊的能力,就像這樣:
myApp.controller("MyCtrl2", function ($scope, ActiveScopesServices) {
//inject registrable behaviour
$injector.invoke(function ($controller) { $controller('RegisterableCtrl', {$scope: $scope});
//continue to normal code of your controller
});
我們可以做的更好,因爲在這裏,我們必須在每個自定義控制器的開始調用$注射器。所以如果你想進一步看看所謂的「AOP」,面向方面的編程。目前已經在這裏這樣的嘗試:
這是正確的,但它是太容易了。這個案例在頁面中只描述了一個控制器,因此定義主動控制器只是推開舊控制器...但是如果頁面中有很多控制器,有些是獨立的,有些不是?用這種方法你無法知道哪些是活動的。在所有情況下,有一個很好的方法可以實現問題的提問。 – bdavidxyz
好點@dabee,你介意告訴我們你正在談論的方法嗎?我很感興趣:) – Bema