Function 角度-建筑a“;“公众”;功能(新手)
通过将我的standart JS应用程序转换为ng应用程序,我已经学习了几天angularJS。 我想知道这个简单的场景: 我有一个名为fb_connect()的全局函数, 它可以从任何页面(或任何控制器,如果您愿意)进行基于facebook的登录。 此函数进行一个简单的http调用,并接收一个JSON对象,该对象包含要继续移动的数据(显示弹出窗口、登录等) 我读到,我可以为我的应用程序定义一个工厂或服务,并在任何控制器中使用它,这很好。 因此,我创建了一个fb_connect工厂函数。 问题是,现在,在每个页面(每个控制器)中,我必须在每个控制器的构造函数中定义fb\u connect,例如:Function 角度-建筑a“;“公众”;功能(新手),function,angularjs,Function,Angularjs,通过将我的standart JS应用程序转换为ng应用程序,我已经学习了几天angularJS。 我想知道这个简单的场景: 我有一个名为fb_connect()的全局函数, 它可以从任何页面(或任何控制器,如果您愿意)进行基于facebook的登录。 此函数进行一个简单的http调用,并接收一个JSON对象,该对象包含要继续移动的数据(显示弹出窗口、登录等) 我读到,我可以为我的应用程序定义一个工厂或服务,并在任何控制器中使用它,这很好。 因此,我创建了一个fb_connect工厂函数。 问题是
function welcome($scope,fb_connect){});
使用Angular执行此类操作的正确方法是什么,而不必每次在每个控制器中定义这些函数
感谢建立工厂和服务都是Angular依赖注入系统的一部分。当您需要创建依赖于其他事物的事物时,使用该系统是非常好的。这是一棵依赖关系的大树。创建单例也很好,这样代码中的任何地方都会使用某个对象的相同实例 在我看来,这两个好处都不适用于你的情况。我建议不要使用Angular的DI。您有一些全局定义的函数,只需直接调用它并跳过DI。这没什么错
当然,您会说它会进行Ajax调用,因此不依赖于$http服务?您可以将它放在$rootScope中
myApp.run(function($rootScope, fb_connect){
$rootScope.welcome = function(){
};
});
你的两个选择是:
- 在
$rootScope
- 将其作为服务注入
正如您在问题中提到的,您不希望在希望使用服务的每个控制器中定义服务。使用
$rootScope
,您将在每个控制器中注入这一点。因此,实际上这是一个您更喜欢的问题,尽管要回答您的问题,使用工厂或服务的正确方法是将其注入您希望使用它的控制器。如果有人回答了您的问题,您应该接受它作为答案。