将缩小的jQuery插件转换为纯JavaScript插件

时间:2014-06-10 09:25:34

标签: javascript jquery angularjs minify

我正在运行一个项目,人们可以在地图上找到医生并在线预订,...

以前我决定使用Angularjs并更改整个项目,所以我不得不忘记之前使用过的一些jQuery插件。

**问题**:

我正在使用jQuery插件,该插件适用于Google地图API(Landcarte),我还没有找到任何可与AngularJS中的插件进行比较的内容。

所以除了在我的网站中同时使用jquery和angular以及这个插件之外我什么都做不了。但是我不知道,我觉得使用jquery和angular都是错误的因为我认为这会让我的第一个重载

**问题:**

1-这可以将此插件转换为普通的Javascript,因此我可以在我的网站中省略Jquery吗?

2-如果没有,我该怎么办?

3-我可以在我的网站中使用RequireJS加载jquery和这个插件吗? (我不知道如何:()

3 个答案:

答案 0 :(得分:1)

我不了解Landcarte插件,所以我无法帮助您处理问题1.

如果你想初始化一个jquery插件但它没有工作,问题的一个常见原因是DOM还没有准备好。

要解决此问题,有三种选择:

方法1 在指令的link属性中初始化插件。在link函数中,指令元素的子元素已经被编译和链接。如果你的插件只依赖于DOM准备好的元素的子元素,那么这个选项是合适的。

  app.directive('myDirective', function(){
          return {
                link: function(scope, element,attr){
                     element.plugin();
                }
          }
  });

方法2 使用$ evalAsyc,它在编译和链接阶段之后但在渲染阶段之前运行。如果您的插件依赖整个页面准备好DOM,请使用此方法,但表达式的呈现并不重要。

  app.directive('myDirective', function(){
          return {
                link: function(scope, element,attr){
                       scope.$evalAsync(function(scope){
                              element.plugin();
                       });
                }
          }
  });

方法3 使用$ timeout在呈现阶段之后运行。如果您的插件依赖整个页面准备好DOM,并且所有表达式都已呈现,请使用此方法。

  app.directive('myDirective', function($timeout){
          return {
                link: function(scope, element,attr){
                       $timeout(function(){
                              element.plugin();
                       });
                }
          }
  });

根据插件的不同,其中一个选项应该适合您。首选最低限度满足插件需求的一个 - 意味着更喜欢选项1,而不是选项2,而不是选项3,但最终选择有效的选项。

答案 1 :(得分:0)

要将min.js文件转换为normal.js,您可以使用this 但它只是设置表格和空格,使脚本可读。

例如这个脚本:

var a={log:function(){try{var e=Array.prototype.slice.call(arguments);if(typeof e[0]==="string"){if(/[\{\}]/.test(e[0])&&e.length>1){var t=e.length>2?e.slice(1):e[1];return console.log(this.text(e[0],t))}}return console.log.apply(console,e)}catch(n){}}}

将是:

var a = {
    log: function () {
        try {
            var e = Array.prototype.slice.call(arguments);
            if (typeof e[0] === "string") {
                if (/[\{\}]/.test(e[0]) && e.length > 1) {
                    var t = e.length > 2 ? e.slice(1) : e[1];
                    return console.log(this.text(e[0], t))
                }
            }
            return console.log.apply(console, e)
        } catch (n) {}
    }
}

答案 2 :(得分:0)

Landcarte也可以在没有jQuery的纯JS代码中使用。可以通过显式调用at.geo.Map类构造函数来初始化映射:

var container = document.getElementById("map");
var map = new at.geo.Map(container);

reference中提到了这个类。