У меня есть простой контроллер, и я хотел бы представить очень похожий дополнительный контроллер, но не копируя слишком много кода.Как наследовать и переопределять методы контроллера в angularjs (java pendent)?
angular.module('test').controller('parentController', parentController);
parentController.$inject = ['$scope', '$location', 'someService'];
function myController($scope, $location, someService) {
var params = getQueryString();
var rsp = executeQuery(params);
processResponse(rsp);
function getQueryString() {
return "?param=1&someparam=2";
}
function executeQuery(params) {
...
}
function processResponse(rsp) {
//process rsp, convert some parts, and populate model properties, like
$scope.model.prop1 = rsp.data.prop1;
}
};
Теперь я хотел бы создать контроллер, который 90% равен коду parentController
. Основные отличия:
- получить
getQueryString()
должны возвращать другой запрос - ответ свойства сеттеров на
$scope
должен содержать-Измененную строку - , необходима дополнительная
filter
функции для внутри нового контроллера, который должен существовать только для него, но не дляparentController
.
Исходя из java
, я бы решить эту проблему, например, с наследованием и перекрытыми методами, как:
public cass ParentClass {
String getQueryString() {
return "?param=1&someparam=2";
}
}
public class CustomClass extends ParentClass {
@Override
String getQueryString() {
return "?customparam=1";
}
@Override
void processResponse(rsp) {
super.processResponse(rsp);
//read "rsp.paramX" additionally
}
}
Но как я могу достичь подобный с angularjs
?
Я не имеющий вложенную структуру родитель-ребенок. Контроллеры должны принадлежать к различным представлениям, все еще очень похожи по своей логике. Когда выполняется 'myController', он действует как некоторый тип класса шаблонов и выполняет эти функции в порядке:' getQueryString, executeQuery, processResponse'. Я хотел бы запретить повторять эти вызовы функций в дочернем элементе, так как их процесс уже определен в родительском классе. – membersound
Я имею в виду, что мне нужно было бы явным образом вызвать эти методы из дочернего элемента, хотя их порядок выполнения уже определен в родительском классе. – membersound
Итак, единственный выбор здесь - определить службу, которая содержит логику, и затем вы определяете функции на обоих контроллерах и используете службу: https: //docs.angularjs.org/guide/services – Tomer