Подтвердить что ты не робот

Angular.js лучшая практика - расширение контроллеров, переопределение настроек по умолчанию для контроллера

Вот реальная проблема Angular, с которой я не могу окутать голову. Я обожаю Angular, но эта проблема очень сильно меня раздражает.

Какова наилучшая практика для расширения существующих функций контроллеров и использования расширенного контроллера на другой странице моего приложения? Другими словами: Как сделать наследование контроллера в Angular?

Отредактировано - 23/09/2014, не думаю, что описание моего оригинального usecase помогает посетителям лучше понять, что я здесь делаю. Я думаю, что это отвлекает людей от реальной проблемы.

4b9b3361

Ответ 1

Через полгода я думаю, что понимаю, что происходит. Как отмечается в комментарии к этому сообщению, самым простым ответом являются услуги.

В наиболее оптимальном случае все переменные области видимости являются значениями, собранными из factory/service. Тем не менее, вы можете использовать один и тот же контроллер с одной дополнительной функцией: $scope.someFunction() {} и сохранить остальные. В этом случае у вас есть "тонкая" логика контроллера, которая является желательной конструкцией контроллера, но может по-прежнему содержать сто или более строк кода. Вы не хотите, чтобы это дублирование в другом контроллере, просто потому, что вам нужна дополнительная логика контроллера (например, $scope.someFunction())

Чем вы занимаетесь?

Ответ таков:

  • Убедитесь, что вы сделали все для того, чтобы решить ситуацию с заводами.
  • Если вы абсолютно уверены, что сделали, перейдите к вводу контроллера:

    .controller('childController', function ($scope, $controller) {
      'use strict';
      $controller('parentController', {$scope: $scope});
      $scope.someFunction=function(){}
    })
    

Это так просто. - опять же, как правило, вещи могут быть решены с заводами.

Надеюсь, вы сочтете это полезным;)

Ответ 2

Аннотация

Проблема, о которой вы говорите, выглядит мне как проблема повторного использования общего кода, для которой существует стандартное решение в области компьютерных исследований (изобретенное в предыдущем столетии), т.е. inheritance. К сожалению, по многочисленным причинам ООП не получил широкого распространения в сообществе JavaScript, одним из которых является тот факт, что он не является основной особенностью языка. Другим является тот факт, что разработчики открыты для создания своих собственных подходов при решении одной и той же проблемы. И, создавая эти разные подходы, разработчики разбивают сообщество на части, которые имеют дело с наследованием по-разному.

Это приводит к размыванию всей идеи ООП и заставляет людей бояться этих трех букв. В моей практике я встретил дюжину людей, говорящих, что JavaScript не создан для ООП и поднимает точки, такие как "JavaScript это функциональный язык", или "наследование - это анти-шаблон" или "Не делать то, для чего JavaScript не предназначалось для". Но когда вы спрашиваете этих людей, что такое ООП?... Обычно ни один из них не может дать ответ. Поэтому мнение имеет большое значение, но оно должно быть приложено к какому-либо исследованию.

Ответ

Таким образом, отвечая на ваш вопрос, я бы предложил использовать подход наследования JavaScript на JavaScript Дж., который подробно описан в следующем сообщении SO: angularjs с наследованием oop в действии