2016-03-22 3 views
0

Я не уверен, как структурировать оператор импорта для сторонней библиотеки.Как структурировать импорт из стороннего приложения angular2

Я пытаюсь использовать загрузку ng2-файла из проекта angular2 в визуальной студии. https://github.com/valor-software/ng2-file-upload

У меня есть это в моем компоненте:

import {FILE_UPLOAD_DIRECTIVES, FileUploader} from 'ng2-file-upload';

с помощью Visual Studio, это будет строить и IntelliSense находит директивы в библиотеке. Во время выполнения я получаю эту ошибку:

GET http://localhost:54675/ng2-file-upload 404 (Not Found)

Очевидно, что это неправильный путь.

Ниже ss моя структура каталогов. Импорт находится в документе document.pload.component.ts.

> wwwroot 
> -------app 
> ----------shared 
> -------------documentUpload 
> ----------------documentUpload.component.ts 
> -------node_modules 
> ----------ng2-file-upload 
> -------------ng2-file-upload.js 
> -------------components 
> ----------------file-upload 
> -------------------file-uploader.js 

Моего источник для NG2-файл-загрузки находится в корневом каталоге проекта и глотка файл перемещается только JS и CSS к моему Wwwroot/node_modules папки. Я думаю, что во время разработки он использует источник в моем корне (поэтому intellisense работает и строит), но во время выполнения он пытается вытащить из wwwroot и что-то отсутствует или упоминается неправильно.

Update: На основе обратной связи я добавил этот модуль к system.config, как показано ниже:

System.config({ 
     packages: { 
      app: { 
       format: 'register', 
       defaultExtension: 'js' 
      } 
     }, 
     map: { 
      'ng2fileupload': 'node_modules/ng2-file-upload/ng2-file-upload.js' 
     } 
    }); 

    System.import('app/boot') 
     .then(null, console.error.bind(console)); 
    System.import('ng2fileupload') 
     .then(null, console.error.bind(console)); 

На данный момент, я получаю 404 ошибку при загрузке: http://localhost:54675/node_modules/ng2-file-upload/components/file-upload/file-select

Этот файл -выбрать компонент находится в подкаталоге в ng2-file-upload. Я добавил его в качестве модуля карты, но только что создал аналогичные ошибки для других компонентов, которые он использует.

Текущий прогресс Это мой файл index.html.

<!DOCTYPE html> 
<html> 

<head> 
    <title>FMS</title> 
    <base href="/" /> 
    <!-- 1. Load libraries --> 
    <script src="/node_modules/angular2/bundles/angular2-polyfills.js"></script> 
    <script src="/node_modules/systemjs/dist/system.src.js"></script> 
    <script src="/node_modules/rxjs/bundles/Rx.js"></script> 
    <script src="/node_modules/angular2/bundles/angular2.dev.js"></script> 
    <script src="node_modules/angular2/bundles/router.dev.js"></script> 
    <script src="node_modules/es6-shim/es6-shim.js"></script> 

    <script src="/node_modules/jquery/dist/jquery.js"></script> 
    <script src="/node_modules/bootstrap/dist/js/bootstrap.js"></script> 
    <script src="/node_modules/angular2/bundles/http.js"></script> 
    <link rel="stylesheet" href="/node_modules/bootstrap/dist/css/bootstrap.css" /> 
    <link rel="stylesheet" href="/node_modules/spinkit/css/spinkit.css" /> 

    <link rel="stylesheet" href="/app/assets/site.css" /> 

    <!-- 2. Configure SystemJS --> 
    <script> 
     System.config({ 
     packages: { 
      app: { 
      format: 'register', 
      defaultExtension: 'js' 
      } 
     }, 
     map:{ 
     'ng2-file-upload':'node_modules/ng2-file-upload/ng2-file-upload.js' 
     } 

     }); 
     System.import('app/boot') 
      .then(null, console.error.bind(console)); 
    </script> 

</head> 

<!-- 3. Display the application --> 
<body> 
    <fmssupport-app></fmssupport-app> 
</body> 

</html> 

Вот мой компонент:

import {Component} from 'angular2/core'; 
import {FILE_UPLOAD_DIRECTIVES} from 'ng2-file-upload'; 

@Component({ 
    selector: 'document-upload', 
    templateUrl: 'app/shared/documentUpload/documentUpload.component.html', 
    directives: [FILE_UPLOAD_DIRECTIVES] 
}) 

export class DocumentUploadComponent { 

} 

И это ошибка, я получаю:

GET http://localhost:54675/node_modules/ng2-file-upload/components/file-upload/file-select 404 Error: XHR error (404 Not Found) loading http://localhost:54675/node_modules/ng2-file-upload/components/file-upload/file-select (…) GET http://localhost:54675/node_modules/ng2-file-upload/components/file-upload/file-drop 404 GET http://localhost:54675/node_modules/ng2-file-upload/components/file-upload/file-uploader 404 (Not Found)

Из этого я могу видеть, что это найти компонент NG2-файлов загрузки но он не работает, когда этот компонент пытается загрузить компоненты во вложенной папке.

ответ

0

Обычно вы делаете это через файл System.config в своем index.html, который вызывает ваше угловое приложение.

Что-то вроде этого:

System.config({ 
     defaultJSExtensions: true, 
     packages: { 
      "/angular2": {"defaultExtension": false} 
     }, 
     map: { 
      'ng2-file-upload': 'node_modules/ng2-file-upload' 
     } 
}); 

Вы заметите функцию map:, это простой способ настройки дополнительных пакетов в angular2.

Edit:

Ваш индекс.HTML файл должен выглядеть следующим образом:

<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script> 
<script src="node_modules/es6-shim/es6-shim.min.js"></script> 
<script src="node_modules/systemjs/dist/system.js"></script> 
<script src="node_modules/ng2-file-upload></script> //Note how I am grabbing it here. 
<script> 
    System.config({ 
     packages: { 
      app: { 
      format: 'register', 
      defaultJSExtensions: true 
      }, 
     }, 
     map: { 
      "ng2-file-upload": "/node_modules/ng2-file-upload"//This is so we map it to the name ng2-file-upload for use in our application. 
      } 
     }); 
</script> 
<script src="node_modules/rxjs/bundles/Rx.js"></script> 
<script src="node_modules/angular2/bundles/angular2.js"></script> 
<script src="node_modules/angular2/bundles/http.min.js"></script> 
<script src="node_modules/angular2/bundles/router.min.js"></script> 
<script> 
    System.import('app/boot') 
     .then(null, console.error.bind(console)); 
</script> 

После выполнения этого вы должны быть в состоянии:

import {Ng2-file-uploader} from 'ng2-file-upload' 

Я не уверен, что экспорт NG2-файла-загрузки будет, так что вы» d должны найти имя, и если папка к файлу 3 директории вниз, вы будете ссылаться на это нравится:

'ng2-file-upload/second_directory/third_directory/name_of_component' 

это должно получить его и работает.

Документы на System.js довольно хороши и легко читаются здесь, это хороший способ увидеть, как добавлять плагины к нему из своего github. https://github.com/systemjs/systemjs/blob/master/docs/overview.md#plugin-loaders

Надеюсь, это поможет! Извините, я не опубликовал это вчера, большая метель здесь, и власть выходила весь день!

Edit 2:

ИТАК несколько вещей, вы указываете файл, а не каталог в вашей map функции, которая хорошо, если вы только хотите использовать этот конкретный файл для NG2-файла -загрузить. Но вы по-прежнему на самом деле неправильно указывали файл, который дает вам некоторые головные боли, он должен быть ng2-file-uploader.js.

Кроме того,

{FILE_UPLOAD_DIRECTIVES} from 'ng2-file-upload'; 

Это импорт утверждение является недействительным, нет в NG2-файл-загрузки не FILE_UPLOAD_DIRECTIVES. Он имеет только FileUploader Class. Вы можете проверить себя из своего источника https://github.com/valor-software/ng2-file-upload/blob/master/components/file-upload/file-uploader.ts.

Вы могли бы использовать:

import {FileUploader} from 'ng2-file-upload' 

или

import {FileUploader as FILE_UPLOAD_DIRECTIVES} from 'ng2-file-upload' 

Я думаю, что некоторые из проблем, вы работаете в однако, является тот факт, что вы не указываете директорию и только указав файл непосредственно. Именно поэтому вы работаете в ошибку:

http://localhost:54675/node_modules/ng2-file-upload/components/file-upload/file-select

Потому что вы не ссылки вытягивать модуль файлового выберите из каталога, вы только когда-либо получить свой файл-загрузчик. Вы можете обойти это, но в своем HTML-файле вы вообще не ссылаетесь на этот скрипт. У вас должен быть тег сценария:

<script src="node_modules/ng2-file-upload></script> 

Как я уже говорил ранее.

+0

Пробовали - не получилось. Те же результаты. –

+0

Такое же сообщение об ошибке? Можете ли вы показать, как вы импортируете его в свой компонент? –

+0

Я обновил сообщение с помощью system.config. Как узнать, какие модули загружены? –

0

Index.html .. Где "ЛИЭС" ваши .js папку под Wwwroot

System.config({ 
     packages: { 
      appScripts: { 
       defaultExtension: 'js' 
      } 
      , 'ng2-file-upload': { defaultExtension: 'js' } 
       }, map: { 'ng2-file-upload': 'libs/ng2-file-upload/' } 
      } 

    ); 

и компоненты ... {Directpry/File}

import {FILE_UPLOAD_DIRECTIVES, FileUploader} from 'ng2-file-upload/ng2-file-upload'; 
0

В основном я следую @Morgan Ответ G, но я немного обманываю его. Теперь я предоставляю свой код здесь, надеюсь, что он будет полезен другим.


  1. Установка NG2-файлов загрузить npm install ng2-file-upload --save
  2. Импорт в index.html
<script src="node_modules/es6-shim/es6-shim.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> 
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script> 
<script src="node_modules/systemjs/dist/system.js"></script> 
<script src="node_modules/ng2-toastr/bundles/ng2-toastr.min.js"></script> 

<script src="node_modules/rxjs/bundles/Rx.js"></script> 
<script src="node_modules/angular2/bundles/angular2.dev.js"></script> 
<script src="node_modules/angular2/bundles/router.dev.js"></script> 
<script src="node_modules/angular2/bundles/http.dev.js"></script> 

<!-- 2. Configure SystemJS --> 
<script> 
    System.config({ 
    packages: { 
     app: { 
     format: 'register', 
     defaultExtension: 'js' 
    }, 
    'ng2-file-upload': { "defaultExtension": "js" } 
    }, 
    map: { 
     "ng2-file-upload": "/node_modules/ng2-file-upload" 
    } 
    }); 
    System.import('app/main') 
     .then(null, console.error.bind(console)); 
</script> 

3. Импорт директива:

@Component({ 
... 
directives: [FILE_UPLOAD_DIRECTIVES] }) 

И import {FILE_UPLOAD_DIRECTIVES, FileUploader} from 'ng2-file-upload/ng2-file-upload'; 4. Тогда вы должны быть в состоянии добавить

<input type="file" ng2-file-select [uploader]="uploader" multiple /> 

в шаблоне