在面向对象语言中,调用一个类的方法之前,必须先将这个类实例化,才能调用类方法。
单例模式能使得我们不需要每次都需要实例化一次,因为我们使用的对象都是同一个对象。
单例模式:只允许实例化一次的对象类。
Leader返回一个包含getInstance方法的对象,执行这个方法可以获得_module的实例。
eader_01与leader_02完全相等,说明它们是同一个对象,并不是通过new新获取的对象。
但是在多页面情况下,通过import引入的并不是单例模式,因为
模态框弹窗的时候,不希望有两个弹窗
服务的本质是一个单例对象,既然是一个js对象,那么它肯定有属性和方法。当我们把服务注入到控制器中时,我们就可以调用服务,也就是一个js对象的属性和方法了。
这样理解起来是不是很简单,所谓地调用一个服务,其实就是使用一个js对象的属性或方法。
最常见的注册服务的方法是factory()方法。
factory(name,function(){
return{
}
})
它包含两个参数:
1、name
2、一个函数
name是用来注册这个服务的名称,function中会返回一个对象或者函数。这点是不是和我们指令的注册方法十分相似呢,
是的他们都是用一个name来注册一个指令或者是服务的名称。然后用function返回一个对象。
其实,说白了就是用一个name来表示一个js对象。
然后指令调用指令这个js这个对象的时候,用的是html中的标签来调用。而调用服务这个js对象时,是在controller中用服务的名字来实现服务的调用。
我们来看一个controller中调用service的例子:
.controller("myController",function($scope,myService){
$scope.name = "kobe"
$scope.age = 39
alert(myService.serviceName)
myService.serviceMethod()
})
.factory("myService", function(){
return{
serviceName:"testService",
serviceMethod:function()