Как я могу использовать функцию, которая находится внутри службы? - PullRequest
0 голосов
/ 10 марта 2020

То, что я пытаюсь сделать, это использовать функцию глобально на всех контроллерах. Проблема в том, что я хочу использовать функцию, определенную внутри службы, в функции first . Он показывает ошибку, что не может найти функцию . Я пытался без этого ключевого слова, но оно не работает. Я могу go до все функционировать, когда я пробовал в других контроллерах, что является хорошим признаком того, что я могу использовать эту службу глобально.

Короче говоря, я хочу использовать функцию all внутри first function.

app.factory("UserService", function() {
  var users = ["Peter", "Daniel", "Nina"];

  return {
    all: function() {
      return users;
    },
    first: function() {
      var users = this.all(); 
      return users[0];
    }
  };
});

Код выше был Пример, который я сделал, и реальный код выглядит следующим образом. контроллер

angular.module("app").requires.push("app.region");

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

.controller("regionCreateController", ["$scope", "phoneMaskService", function ($scope, phoneMaskService) {
    $scope.createClicked = function (data) {
        data = phoneMaskService.putMaskOnRegion(data);
        console.log(data);

    };
}

Когда я поставил phoneMaskService , то есть сервис, который я сделал в приложении . js, и он не работает.

Это ошибка, которую я получаю

angular.js:14110 ReferenceError: removeAllLetters is not defined



Это фактическая ошибка при создании кода.


        .factory("phoneMaskService", [function () {


            var returnMethod = {
                removeAllLetters: removeAllLetters,
                putMaskOn: putMaskOn,
                putMaskOnRegion: putMaskOnRegion
            }; 

            return returnMethod;
            function removeAllLetters(value) {
                var val = value.replace(/\D+/g, '').replace('\-', '');
                return val;
            }
            function putMaskOn(value) {
                console.log(value);
                value = this.removeAllLetters(value);
                console.log(value);
                var isMobile = parseInt(value.charAt(1)) == 2;
                if (isMobile) {
                    var x = value.replace(/\D/g, '').substring(0, 14).match(/(\d{3})(\d{3})(\d{3,})/);
                    x = ' ( ' + x[1] + ' ) ' + x[2] + ' - ' + x[3];
                    return x;
                } else {
                    var x = value.replace(/\D/g, '').substring(0, 14).match(/(\d{2})(\d{3})(\d{3,})/);
                    x = ' ( ' + x[1] + ' ) ' + x[2] + ' - ' + x[3];
                    return x;
                }
            }
            function putMaskOnRegion(object) {
                angular.forEach(object, function (value, key) {
                    if (key == "contactNumberPhone") {
                        var testvalue = this.removeAllLetters(value);
                        console.log(this);
                        console.log("test value" + testvalue);
                        object[key] = this.removeAllLetters(value);
                    }  
                });
                return object;
            }

        }])

Ошибка происходит здесь, строка и говорит removeallletters не определены

 var testvalue = this.removeAllLetters(value);

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Один из способов избежать проблем с привязкой - объявить функции внутри фабрики:

app.factory("UserService", function() {
  var users = ["Peter", "Daniel", "Nina"];

  return { all: all, first: first };

  function all() {
      return users;
  }

  function first() {
      var users = all(); 
      return users[0];
  }

});
0 голосов
/ 10 марта 2020

Я использую следующее при объявлении фабрик, который создает объект в объявлении фабрики, привязывает к нему методы и возвращает его как фабричный объект. Это может работать в вашем случае.

app.factory("UserService", function() {
  var services = {};

  services.users = ["Peter", "Daniel", "Nina"];

  services.all = function() {
      return services.users;
  }

  services.first = function() {
      return services.all()[0]; 
  }
 return services;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...