Перенос фабрики AngularJS в TypeScript - PullRequest
0 голосов
/ 02 мая 2019

Я готовлюсь к переносу приложения AngularJS на Angular.В настоящее время я смотрю на преобразование кода JS в TS.У меня не было проблем с компонентами и услугами, кроме заводов.Я не могу понять, как преобразовать фабрики для использования TypeScript.

Вот пример:

(function() {
    'use strict';

    angular.module('MyApp')
      .factory('Fruit', Fruit);

    /** @ngInject */
    function Fruit() {

      var Fruit = function(dto) {
        // dto properties
        this.id = "";
        this.name = "";
        this.type = "Orange";
        this.color = "#000000";

        //--------------
        // Create from API response DTO
        if (dto) {
          this.id = dto.id;
          this.name = dto.data.name;
          this.type = dto.data.type;
          this.color = dto.data.color;
        }
      };

      return Fruit;
    }
})();

Я пробовал это, но не работает.Я получаю dto -> dtoProvider not found.

(function() {
    'use strict';

    angular.module('MyApp')
      .factory('Fruit', class Fruit {

        // dto properties
        public id = "";
        public name = "";
        public type = "Orange";
        public color = "#000000";
        constructor (private dto: any) {
          // Create from API response DTO
          if (dto) {
            this.id = dto.id;
            this.name = dto.data.name;
            this.type = dto.data.type;
            this.color = dto.data.color;
          }
        }
      })
    })();

PS У меня пока нет возможности импортировать / экспортировать классы.

1 Ответ

1 голос
/ 02 мая 2019

Поместите функцию Fruit в функцию конструктора класса и верните ее:

class Fruit {
    constructor () {
        function Fruit(dto) {
            // dto properties
            this.id = "";
            this.name = "";
            this.type = "Orange";
            this.color = "#000000";
            //--------------
            // Create from API response DTO
            if (dto) {
                this.id = dto.id;
                this.name = dto.data.name;
                this.type = dto.data.type;
                this.color = dto.data.color;
            };
        }
        return Fruit;
    }
}

angular.module("myApp",[])
.factory("Fruit", Fruit);
.run(function(Fruit) {
  var x = new Fruit();
  console.log(x);
})

ДЕМО на ПЛНКР

...