Поставщик 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/