[英]How inject external javascript file in angularjs controller
我需要在AngularJs控制器中使用此NoSleep.js 。 我使用Bower安装了NoSleep,但是我需要将其注入我的angularjs控制器,但是我不知道该怎么做,NoSleep不是一个角度服务,我需要使用此声明var noSleep = new NoSleep();
为了使用它。
我正在使用babel,webpack,gulp,业力
有什么建议吗?
如果您有任何JS库,但它不是Angularjs库,则只需在html文件中使用script
标签将其添加,然后像以前一样调用它们,然后再创建AngularJs。
你试过了吗?
或采用另一种方法,并用AgnularJs服务包装lib(编写AngularJs服务并在其中调用lib方法),然后将此新服务注入到您想要的任何位置。
更新:
@Mike Feltman和@ richbai90在他们的回答中说的是好的,也许对您来说足够了,但是我认为最好构建您的服务并调用您创建的方法,但是在这些方法中使用您想要的任何库(它将例如在C#中使用接口):
(function() {
'use strict';
angular.module('nosleep.module', []).service('nosleep', ['', nosleepFunc]);
function nosleepFunc() {
var nosleepObj = new NoSleep();
var service = {
method1: method1,
method2: method2
//... etc
};
function method1() {
return nosleepObj.method1();
}
// ..... other methods
return service;
}
})();
这样,如果您想将nosleep
库更改为另一个库,而新的库具有另一个方法名,则只需更改服务代码即可。
看起来NoSleep只是在全局范围内声明了一个函数,因此您可以执行以下操作:
NoSleepService.js
(function () {
// place noSleep minified code here
angular.module('myApp').service('noSleep', NoSleep);
})()
这将在封闭函数中创建一个NoSleep对象,以便它不会污染全局范围并将其new
实例注册到您的angular应用程序。
通常,在Angularjs应用程序中使用非Angularjs库时,它们会包装在模块中。 然后,将模块注入到您的应用程序中,然后根据需要将与此包装的服务/工厂注入到控制器中,因此您将创建一个类似于以下内容的模块:
(() => {
"use strict"
angular.module('nosleep.module', []).factory('nosleep', ['', function () {
return new NoSleep()
}])
})()
然后,您可以使用以下方法将模块注入到主应用程序模块中:
angular.module('myApp', '[nosleep-module')
然后,在需要访问nosleep的控制器中,您将注入nosleep。
class myController {
constructor(nosleep) {
this.nosleep = nosleep
}
}
然后,在您的控制范围内,您可以使用this.nosleep
解决它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.