Использовать отмеченные в Angular2

Я пытаюсь сделать простой встроенный редактор Markdown с Angular2. Я пробовал несколько подходов, но ни один из них не работает. Я установил помеченный с помощью npm, и теперь он виден в каталоге проектов node_modules. Я могу импортировать его, и он распознается NetBeans. Теперь, когда я использую его, ничего не работает, и если я открываю отладчик Firefox, то я нахожу localhost:3000/ отмечен не найден

Я поставил конвертер уценки в сервис. Который выглядит следующим образом:

import { Injectable } from 'angular2/core';

import * as marked from 'marked';

interface IMarkdownConfig {
  sanitize?: boolean,
  gfm?: boolean,
  breaks?: boolean,
  smartypants?: boolean
}

@Injectable()
export class MarkdownService {
  //private md: MarkedStatic;

  constructor() {
    //this.md = marked.setOptions({});
  }

  setConfig(config: IMarkdownConfig) {
   // this.md = marked.setOptions(config);
  }

  convert(markdown: string): string {
    if(!markdown) {
      return '';
    }
    return markdown;
    //return this.md.parse(markdown);
  }
}

используется, как это все работает нормально, за исключением того, что уценка не переводится. Если я раскомментирую все строки с md, он перестанет работать. Компонент, в котором я использую это выглядит так:

import {Component, Input, OnInit } from 'angular2/core';
import {RouteParams} from 'angular2/router';

import {MarkdownService}  from '../services/markdown-converter' 


@Component({
  selector: 'my-story',
  templateUrl: 'app/components/story.html',
  bindings: [MarkdownService]
})
export class StoryComponent implements OnInit {
    public html: string;
    private md: MarkdownService;

    constructor(
         private _routeParams: RouteParams, private _converter: MarkdownService) {
         this.html ='';
         this.md = _converter;
    }

    ngOnInit() {
    }

    public updateValue(val:string) {
        if(!val) { return ''; }
        this.html = val;
    }
}

Я не отображаю все вовлеченные файлы, но если есть файл, который я должен предоставить, просто спросите в комментариях. Если это что-то, что я не понял в отношении Typescript и / или внедрения Angular2 или чего-то еще, любой источник информации, объясняющий эти концепции, приветствуется. Я много читал в интернете, но кажется, что все документы об Angular2 довольно быстро устарели.

3 ответа

Решение

Мне наконец удалось решить мою проблему.

Я упоминал отмеченный в моем файле index.html дважды, чтобы включить скрипт, который я установил с помощью npm, и как только я сопоставил имя, помеченное как https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.5/marked.js если я изменю это на node_modules/marked/marked.min.js это больше не работает, и я получаю странные ошибки GET 404 для моих файлов проекта.

Тогда у меня было несколько записей для отмеченных в моем typings.json а также tsconfig.json которые предложены на некоторых сайтах. Я удалил их. Наконец я покинул "marked": "^0.3.5" запись в моем package.json файл. Вот так выглядит мой index.html:

<!DOCTYPE html>
<html>
  <head>
    <base href="/"/>
    <title>SSE</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">    
    <link rel="stylesheet" href="styles.css">

    <!-- 1. Load libraries -->
    <!-- IE required polyfills, in this exact order -->
    <script src="node_modules/es6-shim/es6-shim.min.js"></script>
    <script src="node_modules/systemjs/dist/system-polyfills.js"></script>
    <script src="node_modules/angular2/es6/dev/src/testing/shims_for_IE.js"></script>   

    <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/marked/marked.min.js"></script>
    <!-- 2. Configure SystemJS -->
    <script>
      System.config({
        packages: {        
          app: {
            format: 'register',
            defaultExtension: 'js'
          }
        },
        map: {
          marked: 'https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.5/marked.js'
        }
      });
      System.import('app/main')
            .then(null, console.error.bind(console));
    </script>
  </head>
  <!-- 3. Display the application -->
  <body>
    <my-app>Loading... </my-app>
  </body>
</html>

и это мой package.json:

{
  "name": "sse",
  "version": "1.0.0",
  "scripts": {
    "start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "lite": "lite-server",
    "typings": "typings",
    "postinstall": "typings install"
  },
  "license": "ISC",
  "dependencies": {
    "angular2": "2.0.0-beta.15",
    "es6-shim": "^0.35.0",
    "marked": "^0.3.5",
    "reflect-metadata": "0.1.2",
    "rxjs": "5.0.0-beta.2",
    "systemjs": "0.19.26",
    "zone.js": "0.6.10"
  },
  "devDependencies": {
    "concurrently": "^2.0.0",
    "lite-server": "^2.2.0",
    "typescript": "^1.8.10",
    "typings": "^0.7.12"
  }
}

Я нашел много похожих вопросов и попробовал все их ответы, а также ответ, который дал здесь Тьерри Темплиер, но по какой-то причине никто из них не работал на меня, или я не был в состоянии воспроизвести их. Я чувствую, что должна быть установка машинописного текста с пометкой кое-где, но куда бы я ни добавлял, это не работает.

Я бы импортировал отмеченную библиотеку следующим образом:

import marked from 'marked';

и используйте его как вы:

@Component({
  selector: 'markdown', 
  template: `
    <div [innerHTML]="convertedData">
    </div>
  `
})
export class MarkdownComponent {
  @Input('data')
  data:string;

  ngOnChanges() { 
    var md = marked.setOptions({});
    this.convertedData = md.parse(this.data);
  }
}

Смотрите этот план: https://plnkr.co/edit/zUstS3T7IJxjQUVCXiAM?p=preview.

Этот вопрос также может помочь вам:

Этот проект предоставляет некоторые директивы для использования Markdown с Angular 2. И он также использует библиотеку Marked.

https://github.com/dimpu/angular2-markdown

Другие вопросы по тегам