我正在运行一个项目,人们可以在地图上找到医生并在线预订,...
以前我决定使用Angularjs并更改整个项目,所以我不得不忘记之前使用过的一些jQuery插件。
**问题**:
我正在使用jQuery插件,该插件适用于Google地图API(Landcarte),我还没有找到任何可与AngularJS中的插件进行比较的内容。
所以除了在我的网站中同时使用jquery和angular以及这个插件之外我什么都做不了。但是我不知道,我觉得使用jquery和angular都是错误的因为我认为这会让我的第一个重载
**问题:**
1-这可以将此插件转换为普通的Javascript,因此我可以在我的网站中省略Jquery吗?
2-如果没有,我该怎么办?
3-我可以在我的网站中使用RequireJS加载jquery和这个插件吗? (我不知道如何:()
答案 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中提到了这个类。