2015-04-17 4 views
3

Что лучше всего подходит для использования внешний код, например. код, найденный в модулях узла, в угловом?Использование модуля узла в 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? 
     }; 
    } 
    }); 
+0

Можно ли предположить, что ваш бэкэнд является приложением Node? –

+0

@ Майкл Бенфорд. Не могли бы вы рассказать о том, какая разница? – fred

+0

Я просто хотел узнать, подаете ли вы свое угловое приложение из приложения Node, поэтому я мог бы предложить что-то вроде Browserify (как это сделал @Dylan Watt). –

ответ

5

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

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

.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. 
}) 

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

Вы по-прежнему хотите выполнить требование в factory и вернуть его, чтобы сохранить его в ракурсе инъекции зависимых углов.

+0

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

+0

См. Мое редактирование для более расширяемого решения. Я все равно просто хватаю код, если это всего лишь однократная проблема, но если вы видите, что хотите использовать множество модулей узлов, браузер может быть хорошим решением. В идеале, большинство из вас приходят из чего-то вроде беседки, и вам это не понадобится. –