«TypeError: i18nService.getSafeText не является функцией» при рендеринге данных для сетки с использованием angular-ui-grid - PullRequest
0 голосов
/ 24 июня 2019

Я импортировал модуль ui-grid в файл импорта модуля моего приложения: import 'angular-ui-grid/ui-grid.core';

Добавлен в тот же файл этот импортированный модуль:

const app = angular
  .module('app', [
    uiRouter,
    uiBootstrap,
    'ui.bootstrap.datetimepicker',
    'ui.grid',
    [...]
    ])

И в контроллере для вида, который будет использовать сетку, я установил gridOptions:

this.gridOptions = {
  columnDefs: [
    {name: "Account", field: "accountNumber", enableCellEdit: false},
    {name: "dateFrom", field: "dateFrom", enableCellEdit: false},
    {name: "dateTo", field: "dateTo", enableCellEdit: false},
    {name: "operationsType", field: "operationType", enableCellEdit: false},
    {name: "someId", field: "someId", enableCellEdit: false}
  ]
};
[...]
const jsonObj = this.XLSX.utils.sheet_to_json(sheetObj, {header: ["accountNumber", "dateFrom", "dateTo", "operationType", "someId"]});
this.gridOptions.data = jsonObj;

И установить элемент сетки в поле зрения:

<div ng-if="vm.gridOptions.data" id="grid1" ui-grid="vm.gridOptions"
     class="grid col-xs-12">
</div>

Но при рендеринге сетки я получаю ошибку в консоли:

TypeError: i18nService.getSafeText is not a function
    at Object.link (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:4815:1), <anonymous>:2158:28)
    at eval (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:2394:1), <anonymous>:1247:18)
    at eval (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:2394:1), <anonymous>:9928:44)
    at invokeLinkFn (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:2394:1), <anonymous>:9934:9)
    at nodeLinkFn (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:2394:1), <anonymous>:9335:11)
    at eval (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:2394:1), <anonymous>:9673:13)
    at processQueue (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:2394:1), <anonymous>:16383:28)
    at eval (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:2394:1), <anonymous>:16399:27)
    at Scope.$eval (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:2394:1), <anonymous>:17682:28)
    at Scope.$digest (eval at <anonymous> (http://localhost:3000/vendor.bundle.js?97065532baea04c9b656:2394:1), <anonymous>:17495:31) <div ui-grid-menu="" menu-items="menuItems" col="col" class="ng-isolate-scope">

Но функция есть в ui-grid.core.js, ui-grid.core.min.js, ui-grid.js и ui-grid.min.js:

getSafeText: function (path, lang) {
          var language = lang || service.getCurrentLang(),
            trans = langCache.get(language),
            missing = i18nConstants.MISSING + path,
            getter = $parse(path);

          if (!trans) {
            return missing;
          }

          return getter(trans) || missing;
        },

Я не знаю, что с этим происходит. Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 25 июня 2019

Я обнаружил проблему - я уже использую свой собственный пользовательский сервис i18nService, который называется так же, как пользовательский сервис i18n, используемый внутри angular-ui-grid.

Придется переименовать один из них, и проблема исчезнет.

Я, например, скопировал весь пакет angular-ui-grid в папку локальных поставщиков приложений и переименовал ui-grid i18nService во что-то другое.

Теперь все работает нормально.

...