Внедрение кода JS в приложение Angular

Я выполнил довольно много учебных пособий по угловым направлениям и чувствую себя довольно комфортно с компонентами, услугами, формами.

К сожалению, мне неудобно внедрять код JS и jQuery в файлы.ts. Например: http://jsfiddle.net/Jjgmz/1/

Этот код реализует перетаскиваемый, и это просто в Jquery. Как вы переводите этот код JS в компонент?

Это то, что я пытался.

export class TextComponent implements OnInit {

  box;
  drag = {
    elem: null,
    x: 0,
    y: 0,
    state: false
  };
  delta = {
    x: 0,
    y: 0
  };

  constructor() { }

  ngOnInit() {
    this.box = $(this);
    $(this).mousedown(function (e) {
      console.log("down");
      if (!this.drag.state) {
        this.drag.elem = this;
        this.style.backgroundColor = '#f00';
        this.drag.x = e.pageX;
        this.drag.y = e.pageY;
        this.drag.state = true;
      }
      return false;
    });
    $(document).mousemove(function (e) {
      console.log("move");
      if (this.drag.state) {
        this.drag.elem.style.backgroundColor = '#f0f';
        this.delta.x = e.pageX - this.drag.x;
        this.delta.y = e.pageY - this.drag.y;
        $('#log').text(e.pageX + ' ' + e.pageY + ' ' + this.delta.x + ' ' + this.delta.y);
        var cur_offset = $(this.drag.elem).offset();
        $(this.drag.elem).offset({
          left: (cur_offset.left + this.delta.x),
          top: (cur_offset.top + this.delta.y)
        });
        this.drag.x = e.pageX;
        this.drag.y = e.pageY;
      }
    });
    $(document).mouseup(function () {
      if (this.drag.state) {
        this.drag.elem.style.backgroundColor = '#808';
        this.drag.state = false;
      }
    });
  }
}

Это не работает Я не уверен, что JS даже предназначен для такого использования. Другой вариант, о котором я могу подумать, это добавить директивы (mousedown), (mousemove).. к элементам, чтобы попытаться реализовать функции таким образом.

На самом деле, я спрашиваю о практике внедрения JS в angular. Должен ли JS быть полностью переписан? Это звучит много времени. Есть ли более аккуратный способ?

1 ответ

Это не способ сделать это. Вам нужно сообщить Angular, что вы используете Jquery в вашем Компоненте.

Например, используя jssha lib в Angular

Первый шаг

npm install jssha --save [using jssha for this demo]

Шаг второй Добавьте файл скриптов jssha в файл.angular-cli.json

"scripts": [ "../node_modules/jssha/src/sha.js" ]

Шаг третий Добавление переменной в компонент для использования в качестве глобальной переменной

//using external js modules in Angular
declare var jsSHA: any;
shaObj:any;
hash:string; // the below code will go after ngAfterInit
this.shaObj = new jsSHA("SHA-512", "TEXT");
this.shaObj.update("This is a Test");
this.hash = this.shaObj.getHash("HEX")

Если вышеупомянутое доказать

В вашем случае вам нужно поместить некоторую ссылку на шаблон в ваш компонент, а затем получить доступ к элементу, используя View Child, а затем ссылку в ngAfterViewInit.

Что-то вроде

<div #ref><div>

@ViewChild('ref') myref : ElementRef;

then use this myRef to apply the necessary Javascript
Другие вопросы по тегам