Внедрение Underscore.js в угловой контроллер

Я попробовал два решения здесь безрезультатно.

Это моя ошибка:

angular.js:68 Uncaught Error: [$injector:modulerr] Failed to instantiate module flavorApplication due to: Error: [$injector:unpr] Unknown provider: underscore

Вот мой код для модуля:

var underscore = angular.module('underscore', []);
underscore.factory('_', ['$window', function() {
  return $window._;
}]);

Вот мой конфиг приложения:

(function(){
  angular.module("flavorApplication",
    ['ui.bootstrap',
        'ui.router',
        'angular-loading-bar',
        'angular-confirm',
        ]);
        angular.module("flavorApplication").config(['$stateProvider', '$urlRouterProvider', '$locationProvider', 
        'underscore', function ($stateProvider, $urlRouterProvider, $locationProvider, underscore){

Здесь я пытаюсь ввести его в контроллер (возможно, там, где я иду не так)

(function () {
    'use strict';

    angular
        .module('flavorApplication')
        .controller('UsedSearchesController', UsedSearchesController);

    UsedSearchesController.$inject = ['$stateParams', '$state', 'DataService', '_'];
    function UsedSearchesController($stateParams, $state, DataService, _) {
        var vm = this;
        vm.currentSearches = $stateParams.search.split("|")


        activate(vm);

        ////////////////

        function activate(vm, _) {
            vm.removeSearch = function (searchTerm) {
              $stateParams.search =  _.filter(vm.currentSearches, 
              function(search){return search !== searchterm}).join("|")
                $state.go('home');
            }
        }
    }
})();

1 ответ

Решение

Вы пропустили $window зависимость для инъекций на вашем заводе

underscore.factory('_', ['$window', function($window) {

Другая вещь, которую вы не можете получить factory/service одноэлементный объект, который будет доступен на этапе конфигурации angular, вы не можете получить этот объект там.

//remove 'underscore' dependency from config phase like below.
angular.module("flavorApplication").config(['$stateProvider', '$urlRouterProvider', '$locationProvider',
   function ($stateProvider, $urlRouterProvider, $locationProvider){

Кроме того, вам не нужно добавлять _ в качестве параметра в activate функция,

function activate(vm) { //<-- remove _ from here

Не забудьте ввести underscore модуль для flavorApplication модуль, чтобы сделать доступным _ объект во всех прикладных модулях и компонентах.

angular.module("flavorApplication",
['ui.bootstrap',
    'ui.router',
    'angular-loading-bar',
    'angular-confirm',
    'underscore' //<-- added underscore module here
]);
Другие вопросы по тегам