Поставщик AngularJS не принимает объявление функции ES6

Я пытался переписать некоторый наш код в соответствии с ES6 и столкнулся со следующей проблемой.

angular.js: 63 Uncaught Ошибка: [$injector:modulerr] Не удалось создать экземпляр приложения модуля из-за: Ошибка: [$injector:pget] Поставщик 'books' должен определить метод $get factory.

Это когда я пишу объект провайдера в этом коде.

(() => {
    const app = angular.module('app', []);

    const books = () => { // Error is here
        let includeVersionInTitle = false;

        this.$get = () => {
            const appName = "Book Logger";
            const appDesc = "Track which books you read.";
            let version = "1.0";

            appName = (includeVersionInTitle) ? (appName += " " + version) : appName;

            return {
                appName: appName,
                appDesc: appDesc
            }
        };

        this.setIncludeVersionInTitle = (value) => {
            includeVersionInTitle = value;
        };
    };

    app.provider("books", [books]);
})();

Когда я меняюсь const books = () => { ... } к этому, const books = function() { ... }, Это сработает и не выдаст эту ошибку.

я думал так const a = function() { ... } а также const a = () => { ... } где то же самое? Почему он выбрасывает эту ошибку?

1 ответ

Решение

Функции со стрелками не имеют своего собственного "this", но используют это из окружающего кода. Вы должны использовать традиционную функцию.

this.$get = function() {

Вы можете проверить более глубокое объяснение здесь:

https://derickbailey.com/2015/09/28/do-es6-arrow-functions-really-solve-this-in-javascript/

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