Mam bibliotekę JS z takimi funkcjami takimi jak:

function TestService() {
}

TestService.init = function() {
 ------
}

TestService.foo = function() {
--------------
}

Teraz jest to stara biblioteka i chciałby korzystać z tych funkcji w kątowym kątowym. Czy istnieje sposób, w jaki możemy go owinąć jako usługę / fabrykę i prawidłowo go używać? Doceń pomoc z góry.

1
abhinav singh 27 czerwiec 2017, 23:56

3 odpowiedzi

Najlepsza odpowiedź

Jeśli Twoja klasa została zaprojektowana tak, aby była tworzona z new, po prostu przekazać go do .service:

app.service('testService', TestService);

Kątowa nazywa na nim new na nim, aby utworzyć singleton.

Edytuj:

Myślałem, że twoje pytanie miały błąd, a funkcje miały być naprawdę przypisane do prototypu.

Jeśli po prostu potrzebujesz tej funkcji, zwróć go za pomocą fabryki lub stałej:

app.factory('testService', function() {
    return TestService:
});

Lub:

app.constant('testService', TestService);
2
Frank Modica 27 czerwiec 2017, 21:48

Możesz użyć powracającego class z angular.factory:

class TestService {
  constructor() {
    console.log('instance initialized');
  }

  static init() {
    console.log('static init')
  }

  static foo() {
    console.log('static foo');
  }
}

angular.module('app', [])
  .factory('TestService', () => TestService)
  .run((TestService) => {
    new TestService();
    TestService.init();
    TestService.foo();
  })
<script src="https://code.angularjs.org/1.6.2/angular.js"></script>
<div ng-app="app"></div>
0
Karen Grigoryan 27 czerwiec 2017, 21:21

Tak oczywiście :

// trying to gimmick your library
function test() {}

test.prototype.hey = function() {
    alert('hey');
}

test.prototype.hoy = function() {
    alert('hoy');
}

app.factory('testFactory', function() {
    // that's where your using your library
    return new test();           
});

A następnie użyj go w kontrolerze:

// controller function
function HelloCtrl($scope, testFactory) {
    testFactory.hey();
}

Spróbuj :

http://jsfiddle.net/uflf50n1/

0
Gatsbill 27 czerwiec 2017, 21:09