10

npmを使用してダウンロードし、後ですべてを単一のファイルでブラウザ化するAngular Uploaderを使用しようとしています。エラーの詳細はここで確認できます

私はまだAngularJSに慣れていないので、エラーを理解できません。これが私のコードです

var angular = require('angular');
angular
    .module('jobApp', [require('angular-material'), require('ng-file-upload')])
    .controller('MainCtrl', ['$rootScope', '$scope', '$mdToast', '$animate', '$http', '$timeout', '$q', '$log', 'Upload',
        function($rootScope, $scope, $mdToast, $animate, $http, $timeout, $q, $log, Upload) {
        'use strict';
        // Initialize the scope variables
        $scope.$watch('files', function () {
            $scope.upload($scope.files);
        });
        $scope.upload = function (files) {
            if (files && files.length) {
                for (var i = 0; i < files.length; i++) {
                    var file = files[i];
                    Upload.upload({
                        url: 'http://sr-recruit.herokuapp.com/resumes',
                        fields: {
                            'name': $scope.name,
                            'email': $scope.email,
                            'about': $scope.about
                        },
                        file: file
                    }).progress(function (evt) {
                        var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
                        $scope.log = 'progress: ' + progressPercentage + '% ' +
                                    evt.config.file.name + '\n' + $scope.log;
                    }).success(function (data, status, headers, config) {
                        $scope.log = 'file ' + config.file.name + 'uploaded. Response: ' + JSON.stringify(data) + '\n' + $scope.log;
                        $scope.$apply();
                    });
                }
            }
        };
    }]);

アップデート

現在、Browserify-shim を使用して、Angular-file-upload を Commonjs 形式で適切に囲んでいます。@ryan Johnson に感謝します。

ここにpackage.jsonがあります

{
    "browser": {
        "angular": "./node_modules/angular/angular.js",
        "ng-file-upload": "./node_modules/ng-file-upload/dist/ng-file-upload-all.js"
    },
    "browserify-shim": {
        "angular": {
            "exports": "angular"
        },      
        "ng-file-upload": {
            "exports": "angular.module('ngFileUpload').name"
        }
    },
    "browserify": {
        "transform": [
            "browserify-shim"
        ]
    }
}

私はまだエラー

TypeError: Cannot read property '' of undefined

理由がわからない。参考までに、私は browserify に組み込まれている Laravel-elixir を使用してタスクを実行しています。

4

1 に答える 1

19

require('ng-file-upload')モジュールを含めるために使用していることに気付きました。モジュールは npm から入手できますがng-file-upload、ダウンロードした JS ファイルは commonJS 形式ではありません。

があなたの例で機能するためにはrequire('ng-file-upload')、ソースファイルは次のようにモジュールをエクスポートする必要があります:

module.exports = angular.module('ng-file-upload').name;

これは、インクルードしているファイルには当てはまらないため、 Browserify で動作するようにシムする必要があります。これは、 Browserify を使用して AngularJS アプリケーションを適切にシムすることに関する良い記事です。

于 2015-06-12T03:44:05.343 に答える