Использование модуля узла в angularjs?

Как лучше всего использовать внешний код, например код, найденный в модулях узла, в угловом формате?

Я хотел бы использовать этот узел https://www.npmjs.com/package/positionsizingcalculator в своем угловом приложении. Я создал угловой сервис, предназначенный для обертывания модуля узла, и теперь я хочу, чтобы сервис использовал модуль узла.

'use strict';

angular.module('angularcalculator')
  .service('MyService', function () {
    this.calculate = function () {
      return {
        //I want to call the node module here, whats the best practice?
      };
    }
  });

1 ответ

Решение

Для этого я бы взломал пакет и вытащил из него.js. Этот пакет имеет лицензию MIT, поэтому мы можем делать все, что захотим. Если вы перейдете к /node_modules/positionsizingcalculator/ вы найдете index.js, Откройте его, и вы увидите экспорт moudle, который принимает функцию, которая возвращает объект.

Вы заметите, что это очень похожая картина .factory, которая также принимает функцию, которая возвращает объект (или конструктор, в зависимости от вашего шаблона). Так что я бы сделал следующее

.factory('positionsizingcalculator', function(){
        basicValidate = function (argument) {
        ... //Insert whole declaration in here
        return position;
}) 

и введите его там, где вам это нужно:

.controller('AppController', function(positionsizingcalculator){
    //use it here as you would in node after you inject it via require.
})

- Редактировать: это хорошо для того, чтобы захватить JS, но если вам нужно более расширяемое решение, http://browserify.org/ - лучшая ставка. Это позволяет превратить ваши требования в единый пакет. Обратите внимание, что это может привести к тому, что вам понадобится гораздо больше кода, который вам может понадобиться в противном случае, если вы сделаете один требуемый пакет для всего сайта, поскольку это не настоящий AMD, и вам нужно загрузить все, что вам может понадобиться, один клиент, если вы не делаете специфичные для страницы связки.

Вы все еще хотите сделать требование в factory и вернуть его, чтобы сохранить его в структуре внедрения зависимостей angular.

Другие вопросы по тегам