#javascript #angularjs
#javascript #angularjs
Вопрос:
Как удалить повторяющийся код, предоставив метод в качестве параметра в javascript? Ниже приведен код.
var toastrService = function (toastr) {
var _toastrService = this;
_toastrService.success =function(message,title) {
toastr.success(message,title);
}
_toastrService.info =function(message,title) {
toastr.info(message,title);
}
_toastrService.error =function(message,title) {
toastr.error(message,title);
}
_toastrService.warning =function(message,title) {
toastr.warning(message,title);
}
_toastrService.success =function(message,title) {
toastr.success(message,title);
}
}
Комментарии:
1. Зачем вообще что-либо из этого …?
2. почему бы не добавить третий параметр для цели?
3. Ваш
toastrService
имеет очень низкое значение, просто используйте напрямуюtoastr
нет?4. @DanieleTorino Я согласен и я не согласен 🙂 Если что-то изменится, код все равно придется менять. Необходимо оценить риск этого изменения, чтобы определить, действительно ли это ценно. Например, вы также можете изменить прокси-сервер в какой-то момент, так почему бы не защитить его, проксируя прокси-сервер и т.д. Инкапсуляция (как и многие другие вещи) должна быть не догматичной, а прагматичной.
5.
success
это хорошо, но вам действительно нужно это дважды ..?
Ответ №1:
Просто выполните итерацию по массиву строк свойств:
['success', 'info', 'error', 'warning', 'success'].forEach((prop) => {
_toastrService[prop] = function(message, title) {
toastr[prop](message, title);
};
});
Если вам не нужно удалять лишние аргументы функции, вы можете сократить их до:
['success', 'info', 'error', 'warning', 'success'].forEach((prop) => {
_toastrService[prop] = toastr[prop].bind(toastr);
});
Если функции не нужны this
of toastr
, то вы можете не использовать .bind
и просто назначить обычную функцию:
_toastrService[prop] = toastr[prop]
Ответ №2:
Чтобы сделать глобальное свойство вводимым, просто объявите его как значение AngularJS:
angular.module("app",[]).value("toastrService", toastr);
Затем внедрите его там, где это необходимо:
app.controller("ctrl", function (toastrService) {
toastrService.info("Title","Message");
});
Для получения дополнительной информации см.