2013-08-12 3 views
0

Я новичок в AngularJS (чтение документов в течение недели или около того), так что несите меня :) Я пытаюсь выставить некоторую стороннюю библиотеку (JayData) для контроллеров AngularJS через инфраструктуру DI/Service.Как создать услугу AngularJS, доступную из стандартного приложения/настраиваемого модуля

Создание сервиса - это просто, если вы можете создать свой собственный модуль для этого и установить ng-приложение для этого модуля.

var mod = angular.module('myModule', [], function ($provide) { 
     $provide.factory('$data', ['$scope', function (sc) { 
      return $data; 
     }]); 
    }); 

    <html ng-app='myModule'></html> 

В моих разработчиков случае будет создать свой собственный модуль приложения/запуска, или будет использовать «приложение нг по умолчанию» без указания рода имен модулей, как <html ng-app="".

Как зарегистрировать услугу, доступную по всему миру, такую ​​как встроенные службы, такие как $ scope или $ http?

+1

Есть ли что-то против объявления зависимости вашего модуля в их определении модуля? То есть: 'var module = angular.module (" ИхThirdPartyModule ", [" YourModule "])'? Это обычный способ сделать это! –

+0

@stevuu Но что, если нет другого модуля приложения, кроме значения по умолчанию? (Нг-приложение = ""). Также это не требуется для встроенных служб, поэтому должен быть способ сделать его простым в использовании ... Или нет? –

+1

Встроенные службы объявляются на модуле 'ng', поэтому вы можете добавить их там с помощью функции' angular.module ("ng"). Service (...) '. Но это звучит неплохо! –

ответ

2

Вы можете добавить компоненты к модулю ng, который является модулем по умолчанию, с angular.module("ng").service(...). Как упоминалось в комментариях, это плохая идея по нескольким причинам, наиболее заметно, что команда Angular может предоставить услугу с тем же именем позже.

Для справки предпочтительным способом является определение собственного модуля, такого как myAwesomeDataModule, и добавление его в качестве зависимости в других модулях: angular.module("myModule", ["myAwesomeDataModule"]).

+1

BTW - использование цепочки модулей также возможно, что вы просто выбираете одно и то же имя службы, которое выбрали кто-то другой, поэтому он не спасет вас от временного затенения. –

+0

Если конфликт имен является наиболее заметной причиной не связывания сервисов с модулем ng, тогда решение прост, пространство имен. Например. angular.module («ng»). service («MyCompany.Module.AwesomeApp.Service.UserAuthentication», ...). AngularJS не поддерживает поддержку модуля post-bootstrap, но при этом сервисы на модуле ng позволяют легко вставлять без хаков при использовании библиотек AMD, таких как RequireJS. –

Смежные вопросы