Angular injector error with Filestack

时间:2016-10-20 18:48:43

标签: angularjs angularjs-controller angularjs-config

I am attempting to integrate Filestack into an existing app. I think I am having issues with how those modules are configured, but can't get the ordering correct. I receive this error:

angular.js:38Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.5.6/$injector/modulerr?p0=myApp&p1=TypeError%…ogleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.6%2Fangular.min.js%3A20%3A156)

Here is the routing file:

    (function () {

    var app = angular.module('myApp', ['ngRoute', 'angular-filepicker']);

    // ROUTING
    app.config(['$routeProvider', function($routeProvider, filepickerProvider){

        $routeProvider
            .when('/home', {
                templateUrl: "views/home.html",
                controller: "HomeController"
            })
            .when('/shopping-list/:id', {
                templateUrl: "views/shopping-list.html",
                controller: 'ShoppingListController'
            })
            .when('/add-list', {
                templateUrl: "views/add-list.html",
                controller: 'AddListController'
            })
            .otherwise({
                redirectTo: '/home'
            });
            filepickerProvider.setKey('XXXXXXX');
    }]);

Here is the index.html: 





    <!DOCTYPE html>
    <html ng-app="myApp">
    <head>
        <!-- CDN SCRIPTS -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/randomcolor/0.4.4/randomColor.min.js"></script>

        <!-- Font Awesome -->
        <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">

        <!-- Bootstrap -->
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <!-- Tara's Custom CSS -->
        <link rel="stylesheet" type="text/css" href="css/style.css">

        <!-- Imported Google Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Rubik" rel="stylesheet">



        <title>Shopping List</title>

    </head>

    <body>

      <div ng-include="'partials/header.html'"></div>

      <main ng-view></main>

        <!--ANGULAR SCRIPTS-->
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular-route.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular-animate.min.js"></script>
        <script src="/bower_components/filepicker-js/filepicker.js"></script>
        <script src="/bower_components/angular-filepicker/dist/angular_filepicker.js"></script> 
        <script type="text/javascript" src="//api.filestackapi.com/filestack.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
        <script type="text/javascript" src="js/controllers/controller-header.js"></script>
        <script type="text/javascript" src="js/controllers/controller-home.js"></script>
        <script type="text/javascript" src="js/controllers/controller-add-list.js"></script>
        <script type="text/javascript" src="js/controllers/controller-shopping-list.js"></script>

    </body>

    </html>

And the controller that is using Filestack:

        (function () {
        'use strict';

        var app = angular.module('myApp');

        app.controller('ShoppingListController', ['$scope', '$http', '$routeParams', 'API_BASE', '$location', function($scope, $http, filepickerService, $routeParams, API_BASE, $location){


            // GET SPECIFIC LIST
            $scope.list = [];
            var id = $routeParams.id;

            $http({
                method: 'GET',
                url: API_BASE + 'shopping-lists/' + id
            }).then(function successCallback(response) {
                $scope.list = response.data[0];
            }, function errorCallback(response) {
                console.log('it did not work');
                console.log(response.statusText);
            });


            // REMOVE LIST
            $scope.removeList = function(){
                var id = $scope.list.id;
                console.log(id);
                $http.delete(API_BASE + 'shopping-lists/' + id)
                    .success(function (data, status, headers, config) {
                        console.log('you deleted :' + $scope.list);
                    })
                    .error(function (data, status, header, config) {
                    });
                $location.path('/home');    
            };

            // RANDOM ID
            function makeid()
            {
                var text = "";
                var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

                for( var i=0; i < 20; i++ ){
                    text += possible.charAt(Math.floor(Math.random() * possible.length));
                }

                text += Date.now();

                return text;
            }


            // ADD ITEM
            $scope.addItem = function(){
                var created = new Date();
                var newID = makeid();

                if($scope.list.hasOwnProperty('items') === false){
                    $scope.list.items = [];
                }
                $scope.list.items.push({
                    name : $scope.newItem.name,
                    priority : $scope.newItem.priority,
                    note: $scope.newItem.note,
                    picture: $scope.newItem.picture,
                    isChecked: false,
                    listId: $scope.list.id,
                    created: created,
                    id: newID
                });
                // console.log($scope.list.items);
                $http.put(API_BASE + 'shopping-lists/', $scope.list)
                    .success(function (data, status, headers, config) {
                    })
                    .error(function (data, status, header, config) {
                    });

                // Reset input fields after submit
                $scope.newItem = {
                    name: "",
                    priority: "",
                    note: ""
                };    
            };
            // ADD ITEM IMAGE
            $scope.upload = function(){
            filepickerService.pick(
            {
                mimetype: 'image/*',
                language: 'en',
                services: ['COMPUTER','DROPBOX','GOOGLE_DRIVE','IMAGE_SEARCH', 'FACEBOOK', 'INSTAGRAM'],
                openTo: 'IMAGE_SEARCH'
            },
            function(Blob){
                console.log(JSON.stringify(Blob));
                $scope.newItem.picture = Blob;
                $scope.$apply();
                });
            };




            // REMOVE ITEM
            $scope.removeItem = function(item){
                var removedItem = $scope.list.items.indexOf(item);
                $scope.list.items.splice(removedItem, 1);

                $http.put(API_BASE + 'shopping-lists', $scope.list)
                    .success(function (data, status, headers, config) {
                    })
                    .error(function (data, status, header, config) {
                    });
            };


            // CLEAR ITEMS
            $scope.clearItems = function(){
                $scope.list.items.length = 0;

                $http.put(API_BASE + 'shopping-lists', $scope.list)
                    .success(function (data, status, headers, config) {
                    })
                    .error(function (data, status, header, config) {
                    });
            };


            // CLEAR CHECKED ITEMS
            $scope.clearCheckedItems = function(){
                var length = $scope.list.items.length-1;

                for (var i = length; i > -1; i--) {
                    if ($scope.list.items[i].isChecked === true) {
                            $scope.list.items.splice(i,1);
                    }
                }

                $http.put(API_BASE + 'shopping-lists', $scope.list)
                    .success(function (data, status, headers, config) {
                    })
                    .error(function (data, status, header, config) {
                    });
            };

            //Edit Items / Checked Items
            $scope.editItem = function(){

                $http.put(API_BASE + 'shopping-lists', $scope.list)
                    .success(function (data, status, headers, config) {
                    })
                    .error(function (data, status, header, config) {
                    });
            };

            // SORT ITEMS
            $scope.sortBy = function(propertyName) {
            $scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false;
            $scope.propertyName = propertyName;
            };

        }]);

    }());

Right now, I can't get the page to load at all. Something isn't being called properly, I just can't figure out how to get the page to load (getting the Filestack to function properly is secondary right now).

Any suggestions with the configuration?

1 个答案:

答案 0 :(得分:1)

You do not have to declare a module for your controller,

 var app = angular.module('myApp');

Change like this also you are missing 'filepickerService' while inecting,

 angular.module('myApp').controller('ShoppingListController', ['$scope', '$http','filepickerService', '$routeParams', 'API_BASE', '$location', function($scope, $http, filepickerService, $routeParams, API_BASE, $location){