Это правильно, чтобы получить доступ к области внутри службы или фабрики в angularjs - PullRequest
0 голосов
/ 23 ноября 2018

Отказ от ответственности: я знаю, что есть определенные вопросы, которые предлагают не получить доступ к области действия внутри сервиса или фабрики, но здесь я ожидаю воздействия с точки зрения руководящих принципов кодирования / целесообразно ли, если нет, тогда мне нужно надлежащее обоснование.

У нас есть угловой проект js, и этот проект старый.Теперь после рефакторинга один из моих коллег переместил обычную реализацию из директивы в сервис.При этом, чтобы получить доступ к области действия директивы, он вручную начал делать, как показано ниже:

    angular.element('<test-dir></test-dir>').scope();

Я чувствовал, что это неправильный способ написания сервиса / фабрики.Я почувствовал, что мы все усложняем, и предложил удалить вышеуказанную часть кода.Чтобы оправдать то же самое, я сказал: 1. Это усложнит тестируемость модуля, и теперь мы пытаемся протестировать сервис так, как мы это делали для тестирования директивы.2. И мы делаем эту услугу тесно связанной с директивой.3. Служба не предназначена для доступа к сфере действия.

Но я думаю, что не могу убедить его, так как у меня нет особого смысла оправдывать это.Может кто-нибудь предложить, если я правильно понимаю, и дать правильное обоснование, чтобы посоветоваться с ним.Спасибо!

1 Ответ

0 голосов
/ 23 ноября 2018

Нет, службы / фабрики должны работать с данными и должны иметь логику для обработки предоставленных им данных.Предпочтительно, они не должны ссылаться на объекты DOM или переменные области видимости.

Лично я считаю, что передача $ scope в службу - плохая идея, поскольку она создает своего рода циклическую ссылку: контроллер зависит отсервис и сервис зависят от области действия контроллера.

Помимо путаницы в отношениях, такие вещи, как эта, оказываются на пути сборщика мусора.

Сервис - это просто функция для бизнес-уровня приложения.Он действует как функция конструктора и вызывается один раз во время выполнения с новым, во многом как с обычным JavaScript (Angular просто вызывает новый экземпляр для нас). Используйте service, когда вы хотите просто создать вещи, которыедействуют как общедоступные API.

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

Я предпочитаю поместить объект домена в область действия контроллера и передать его службе,Таким образом, служба работает независимо от того, будет ли она использоваться внутри контроллера или, возможно, внутри другой службы в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...