Angular Service 和 Angular Factory 的区别
我们将介绍 Angular service
和 Angular factory
服务之间的区别。
我们还将介绍选择 Angular service
而不是 Angular factory
的原因,反之亦然。
Angular Service 和 Angular Factory 的区别
Angular 提供的不同服务类型之间似乎有些混淆,特别是 Angular service
和 Angular factory
服务之间的区别。
区分它们的最佳方法是在这两种服务中创建一个服务并了解它们的差异。
我们将创建一个名为 todoList
的 Angular 模块并将其分配给变量 list
。
var list = angular.module('todoList', []);
现在,我们将使用 Angular service
和 Angular factory
创建名为 todoList
的 Angular service
以查看差异。要创建 Angular service
服务,请调用模块上的 service
方法。
服务方法的第一个参数是服务名称。我们称之为 todoListService
。
服务方法的第二个参数是一个函数。让我们传递一个不需要参数的匿名函数。
因此,我们的代码将如下所示。
list.service("todoListService", function(){
})
让我们实现 todoListService
。当我们第一次将服务注入控制器时,Angular 在我们传入服务方法的函数引用上使用 new
关键字。
换句话说,它将我们的函数视为构造函数。使用 new
关键字会自动发生两件事;首先,我们得到一个分配给 this
变量的空对象。
其次,我们的函数将返回这个对象。函数的其余部分是我们对服务的定义。
所以,让我们设置一个数组来存储我们的待办事项列表。我们的代码如下所示。
list.service("todoListService", function(){
this.todoList = []
})
让我们创建两个方法,addTodo
和 removeTodo
,我们不会实现它们。我们的代码将如下所示。
list.service("todoListService", function(){
this.todoList = []
this.addTodo = function(todo){
//Just to give idea
}
this.removeTodo = function(todo){
//Just to give idea
}
})
因此,我们的 Angular service
是完整的,它具有 addTodo
函数和 removeTodo
函数,它们都是构建为服务的。
当我们注入 this 时,变量 this
会返回给我们并成为我们的服务。要创建 Angular factory
服务,请调用模块上的工厂方法。
服务方法的第一个参数是服务名称,我们称之为 todoListFactory
。服务方法的第二个参数是一个函数。
让我们传递一个不需要参数的匿名函数。
list.factory("todoListFactory", function(){
})
让我们实现工厂服务。
Angular service
和 Angular factory
之间的区别在于 Angular service
作为构造函数是裸露的。相反,Angular factory
只是被调用,从函数返回的任何东西都将是我们的服务。
要实现我们的 todoListFactory
,我们必须创建一个空对象并返回该对象。我们实现的其余部分是相同的。
我们将创建 todoList
数组和两个函数 addTodo
和 removeTodo
。所以我们的代码如下所示。
list.factory("todoListFactory", function(){
var obj = {}
this.todoList = []
this.addTodo = function(todo){
//Just to give idea
}
this.removeTodo = function(todo){
//Just to give idea
}
return obj
})
我们有两个服务,一个 factory
服务和一个 service
服务,相同。我们可以创建一个控制器,注入我们的服务,并以相同的方式使用;它们都具有相同的方法和属性。
list.controller("todoController", function(todoListService, todoListFactory){
todoListService.addTodo(/*todo*/)
todoListFactory.addTodo(/*todo*/)
})
主要问题是为什么你会选择使用 factory
而不是 service
,因为我们可以对它们做同样的事情。答案是,如果我们想要返回除对象之外的任何东西,比如函数,我们必须使用 factory
。
假设我们想要一个允许我们创建待办事项的服务;为此,我们可以创建一个 factory
,该 factory
可以返回一个函数,该函数接受对待办事项和名称的描述。
该函数将返回一个带有描述和名称集的新对象。它将具有标记待办事项完成的功能。
我们的代码如下所示。
list.factory("todoListF", factory(){
return function(description, name){
return{
description: description,
name: name,
complete: function(){
//to-do completed
}
}
}
})
因此,我们可以将新的 todoList
factory
服务注入到我们的控制器中,并使用它来创建新的待办事项,例如待办任务和更新的待办事项。
list.controller("todoFController", function(todoListF){
var task = new todoListF("Push code to github", "Github Push Code")
var update = new todoListF("Update code on github repository", "Update Repository")
})
相关文章
在 Angular 中上传文件
发布时间:2023/04/14 浏览次数:71 分类:Angular
-
本教程演示了如何在 Angular 中上传任何文件。我们还将介绍如何在文件上传时显示进度条,并在上传完成时显示文件上传完成消息。
Angular 中所有 Mat 图标的列表
发布时间:2023/04/14 浏览次数:91 分类:Angular
-
本教程演示了在哪里可以找到 Angular 中所有 Mat 图标的列表以及如何使用它们。
Angular 2 中的复选框双向数据绑定
发布时间:2023/04/14 浏览次数:139 分类:Angular
-
本教程演示了如何一键标记两个复选框。这篇有 Angular 的文章将着眼于执行复选框双向数据绑定的不同方法。
在 AngularJS 中重新加载页面
发布时间:2023/04/14 浏览次数:142 分类:Angular
-
我们可以借助 windows.location.reload 和 reload 方法在 AngularJS 中重新加载页面。
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 AngularJS 中启用 HTML5 模式
发布时间:2023/04/14 浏览次数:150 分类:Angular
-
本文讨论如何在 AngularJS 应用程序上启用带有深度链接的 HTML5 模式。
在 AngularJs 中加载 spinner
发布时间:2023/04/14 浏览次数:107 分类:Angular
-
我们将介绍如何在请求加载时添加加载 spinner,并在 AngularJs 中加载数据时停止加载器。
在 Angular 中显示和隐藏
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程演示了 Angular 中的显示和隐藏。在开发商业应用程序时,我们需要根据用户角色或条件隐藏一些数据。我们必须根据该应用程序中的条件显示相同的数据。
在 Angular 中下载文件
发布时间:2023/04/14 浏览次数:104 分类:Angular
-
本教程演示了如何在 angular 中下载文件。我们将介绍如何通过单击按钮在 Angular 中下载文件并显示一个示例。