Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/function/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 角度-建筑a“;“公众”;功能(新手)_Function_Angularjs - Fatal编程技术网

Function 角度-建筑a“;“公众”;功能(新手)

Function 角度-建筑a“;“公众”;功能(新手),function,angularjs,Function,Angularjs,通过将我的standart JS应用程序转换为ng应用程序,我已经学习了几天angularJS。 我想知道这个简单的场景: 我有一个名为fb_connect()的全局函数, 它可以从任何页面(或任何控制器,如果您愿意)进行基于facebook的登录。 此函数进行一个简单的http调用,并接收一个JSON对象,该对象包含要继续移动的数据(显示弹出窗口、登录等) 我读到,我可以为我的应用程序定义一个工厂或服务,并在任何控制器中使用它,这很好。 因此,我创建了一个fb_connect工厂函数。 问题是

通过将我的standart JS应用程序转换为ng应用程序,我已经学习了几天angularJS。 我想知道这个简单的场景:

我有一个名为fb_connect()的全局函数, 它可以从任何页面(或任何控制器,如果您愿意)进行基于facebook的登录。 此函数进行一个简单的http调用,并接收一个JSON对象,该对象包含要继续移动的数据(显示弹出窗口、登录等)

我读到,我可以为我的应用程序定义一个工厂或服务,并在任何控制器中使用它,这很好。 因此,我创建了一个fb_connect工厂函数。 问题是,现在,在每个页面(每个控制器)中,我必须在每个控制器的构造函数中定义fb\u connect,例如:

function welcome($scope,fb_connect){});
使用Angular执行此类操作的正确方法是什么,而不必每次在每个控制器中定义这些函数


感谢

建立工厂和服务都是Angular依赖注入系统的一部分。当您需要创建依赖于其他事物的事物时,使用该系统是非常好的。这是一棵依赖关系的大树。创建单例也很好,这样代码中的任何地方都会使用某个对象的相同实例

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


当然,您会说它会进行Ajax调用,因此不依赖于$http服务?

您可以将它放在$rootScope中

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

  };
});
你的两个选择是:

  • $rootScope
  • 将其作为服务注入
我的建议是把它变成一种服务。Angular.js文档中解释了服务的全部用途,如下所述:

Angular services是执行web应用程序常见的特定任务的单例服务。。。要使用角度服务,请将其标识为依赖于该服务的依赖项(控制器或其他服务)的依赖项


正如您在问题中提到的,您不希望在希望使用服务的每个控制器中定义服务。使用
$rootScope
,您将在每个控制器中注入这一点。因此,实际上这是一个您更喜欢的问题,尽管要回答您的问题,使用工厂或服务的正确方法是将其注入您希望使用它的控制器。

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