2013-06-29 20 views
0

我经过几天学习angularJS通过转换我的标准JS应用程序到一个ng。我想知道这个简单的场景:Angular - 建立一个“公共”功能(新手)

我有一个全局函数叫做fb_connect(), 它可以用于从任何页面(或任何控制器,如果你喜欢)做一个基于Facebook的登录。 此功能使一个简单的HTTP调用,并接收一个JSON对象包含数据继续前进(显示弹出,登录等)

我读,我可以定义一个工厂或我的应用程序服务和使用它在任何控制器,工作正常。 所以,我创建了一个fb_connect工厂函数。 的问题是,现在,在每个页面(每个控制器),我必须定义fb_connect在每个控制器的构造 - 例如:

function welcome($scope,fb_connect){}); 

什么是做这种正确的方法使用Angular的动作,而不必在每个控制器中每次都定义这些函数?

感谢

+0

如果有人回答了你的问题,你应该接受它作为答案。 – John

回答

0

你有两个选项:

  • 声明对$rootScope
  • 功能注入其作为服务

我的建议是将它作为一项服务。服务的全部目的在Angular.js文档进行了说明,就像这句话:

角度服务是开展共同具体任务,Web应用程序...要使用角度的服务单身,你确定它作为取决于服务的依赖项(控制器或其他服务)的依赖项。

正如你在你的问题中提到,你更愿意在每一个你想在使用它控制器没有定义的服务。随着$rootScope你会被注入,同样在每个控制器。所以真的这是一个你喜欢的问题,尽管回答你的问题,使用工厂或服务的正确方式是将其注入到你想要使用它的控制器中。

1

设厂和服务是棱角分明依赖注入系统的所有组成部分。当您需要创建依赖于其他注入事物的事物时,使用该系统非常棒。这是一个依赖关系的大树。创建单例也很好,例如在代码中的任何地方最终都会使用某个对象的同一个实例。

在我看来,这些好处都不适用于您的情况。我建议不要使用Angular的DI。你有一些全局定义的函数,直接调用它并跳过DI。这没什么错。

当然,你说它会产生一个Ajax调用,所以不依赖于Angular $ http服务?

+0

这是一个Ajax调用,然后我决定将它转换为$ resource方法... –

0

您可以随时把它放在$ rootScope

myApp.run(function($rootScope, fb_connect){ 
    $rootScope.welcome = function(){ 

    }; 
});