栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

角度服务与角度工厂

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

角度服务与角度工厂

  angular.service('myService', myServiceFunction);  angular.factory('myFactory', myFactoryFunction);

直到我以这种方式对自己说:

服务 :您编写的 函数 将是 新的 -ed:

  myInjectedService  <----  new myServiceFunction()

Factory* :将 调用 您编写的 函数 (构造函数): *

  myInjectedFactory  <---  myFactoryFunction()

您可以根据自己的意愿进行操作,但是有一些有用的模式…

例如编写 服务 函数以公开公共API:

function myServiceFunction() {  this.awesomeApi = function(optional) {    // calculate some stuff    return awesomeListOfValues;  }}---------------------------------------------------------------------------------// Injected in your controller$scope.awesome = myInjectedService.awesomeApi();

或使用 工厂 函数公开公共API:

function myFactoryFunction() {  var aPrivateVariable = "yay";  function hello() {    return "hello mars " + aPrivateVariable;  }  // expose a public API  return {    hello: hello  };}---------------------------------------------------------------------------------// Injected in your controller$scope.hello = myInjectedFactory.hello();

或使用 工厂 函数返回构造函数:

function myFactoryFunction() {    return function() {        var a = 2;        this.a2 = function() { return a*2;        };    };}---------------------------------------------------------------------------------// Injected in your controllervar myShinyNewObject = new myInjectedFactory();$scope.four = myShinyNewObject.a2();

使用哪一个?

两者都可以完成相同的事情。但是,在某些情况下, 工厂
为您提供了一些灵活性,可以使用更简单的语法创建可注射的对象。这是因为myInjectedService必须始终是对象,而myInjectedFactory可以是对象,函数引用或任何值。例如,如果您编写了一个用于创建构造函数的服务(如上面的上一个示例中所示),则必须将其实例化为:

var myShinyNewObject = new myInjectedService.myFunction()

可以说这是不那么理想的:

var myShinyNewObject = new myInjectedFactory();

(但是您首先应该警惕使用这种类型的模式,因为控制器中的
对象会创建难以跟踪的依赖关系,而这些依赖关系很难模拟以进行测试。最好让服务来管理用于以下目的的对象集合你比

new()
狡猾地使用。)


还有一件事,他们都是辛格顿人…

还要记住,在两种情况下,角度都可以帮助您管理单例。无论您在何处或多少次注入服务或功能,都将获得对相同对象或功能的相同引用。(除了工厂何时仅返回数字或字符串之类的值。在这种情况下,您将始终获得相同的值,而不是引用。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636138.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号