将JS代码实现到Angular app

时间:2017-09-23 22:27:08

标签: angular

我已经完成了大量的角度教程,我觉得组件,服务,表格都很舒服..

不幸的是,我不习惯将JS和jQuery代码实现到.ts文件中。例如:http://jsfiddle.net/Jjgmz/1/

这段代码实现了draggable,在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 个答案:

答案 0 :(得分:0)

这不是这样做的方法。 您需要告诉Angular您在Component中使用Jquery。

例如 - 在Angular中使用jssha lib

第一步

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

第二步 在.angular-cli.json文件中添加jssha脚本文件

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

第三步 添加要用作全局变量的组件中的var

//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