Javascript 在AngularJs控制器中使用外部类
我不太明白如何注入外部构造函数,我有一个构造函数:Javascript 在AngularJs控制器中使用外部类,javascript,angularjs,Javascript,Angularjs,我不太明白如何注入外部构造函数,我有一个构造函数: function myAudio(url){ var song = new Audio(); song.crossOrigin = "anonymous"; song.src = url; var source = context.createMediaElementSource(song); source.connect(context.destination); this.play = f
function myAudio(url){
var song = new Audio();
song.crossOrigin = "anonymous";
song.src = url;
var source = context.createMediaElementSource(song);
source.connect(context.destination);
this.play = function(){
source.mediaElement.play();
}
}
在外部,只要使用Javascript就可以了。我可以使用var myVar=newmyaudio(“一些url”)
我想在AngularJS控制器中使用该构造函数,但我就是不知道该怎么做
我试图在控制器中声明它,但没有成功
app.controller("myAppCtrl", myMainFunction);
myMainFunction.$inject = ["$interval", "myAudio"];
function myMainFunction($interval, myAudio) {
scope = this;
//my controller stuff
}
试图让它返回一个对象,但我没有找到正确的方法
我不知道我遗漏了什么…将类注册为服务,就像注册控制器一样
app.service("myAudio", myAudio);
关于服务和注入的一个很好的总结:诸如此类
app.factory('MyAudio', function() {
function MyAudio(url){
var song = new Audio();
song.crossOrigin = "anonymous";
song.src = url;
this.source = context.createMediaElementSource(song);
this.source.connect(context.destination);
}
MyAudio.prototype.play = function(){
this.source.mediaElement.play();
};
return MyAudio;
});
app.controller("myAppCtrl", myMainFunction);
myMainFunction.$inject = ["$interval", "MyAudio"];
function myMainFunction($interval, MyAudio) {
this.myAudio = new MyAudio('/some/url.mp3');
this.myAudio.play();
// controller stuff
}
服务是angular使用构造函数定义创建的单例(类似于
myAudio
)。为了注入singleton服务,您需要告诉angular使用以下定义实例化它:
app.service("myAudio", myAudio);
function myAudio(url){
var song = new Audio();
song.crossOrigin = "anonymous";
song.src = url;
var source = context.createMediaElementSource(song);
source.connect(context.destination);
this.play = function(){
source.mediaElement.play();
}
}
然后,您可以将其注入控制器或其他服务中。有关更多详细信息,请参阅首先将其注册为服务。服务返回一个单例,DI将注入“url”,并抛出一个异常。如果成功,我只需确保每次需要更改url时都删除该对象