我想爲多個非常相似的視圖使用基礎AngularJS控制器,但我想更改傳遞到每個控制器的Resource
。實例化並注入到AngularJS控制器中
這是基礎的控制器:
coreAppControllers.controller('ModalEditCtrl',
function ($scope, $stateParams, Resource, $state, $modalInstance) {
// A bunch of methods calling Resource
}
);
現在我想在另一個控制器使用此控制器,但是使用Resource
特定父控制器。
coreAppControllers.controller('MachinesEditCtrl', ['$modal',
function ($modal) {
$modal.open({
backdrop: 'static',
keyboard: false,
templateUrl: '/partials/v1/resources/machines/edit',
controller: //ModalEditCtrl with specific Machine resource injected
});
}]
);
這在JavaScript中可能是錯誤的方法。在其他語言中,我會擴展一個基類,但我不確定那是一個原型語言。
SOLUTION
謝謝PSL的答案,但是,這種方法未能正確注射$modalInstance
。最終的解決方案是使用resolve屬性,讓DI擔心其餘的問題。
出於某種原因,您必須在通過解析時將服務包裝在匿名函數中。
coreAppControllers.controller('MachinesEditCtrl', ['$modal', 'MachinesAPI',
function ($modal, MachinesAPI) {
$modal.open({
backdrop: 'static',
keyboard: false,
templateUrl: '/partials/v1/resources/machines/edit',
controller: 'ModalEditCtrl',
resolve: {
Resource: function() {
return MachinesAPI;
}
}
});
}
]);
如果您只想更改資源,那麼可以使用Dep注入參數。例如:'coreAppControllers.controller('ModalEditCtrl1',['$ scope','$ stateParams','DiffResource','$ state','$ modalInstance',ctor]);' – PSL 2014-09-01 23:56:09
另一種方法是使用'$ controller 'option http://plnkr.co/edit/E0xCJO?p=preview – PSL 2014-09-02 00:05:48
如果你通過路由器調用控制器,你可以在路由器本身使用'resolve'屬性:http:// stackoverflow。COM /問題/ 17716871 /如何到重用一個控制器功能於angularjs與 - 不同的變量爲基礎,路線上 – Jorg 2014-09-02 00:18:04