一尘不染

Angular2中的工厂相当于什么?

angularjs

因此,我习惯于在Angular中使用工厂和服务。

我正在阅读Angular2文档,但看不到任何等效的工厂。Angular2的等效项是什么?


阅读 276

收藏
2020-07-04

共1个答案

一尘不染

工厂,服务,常量和值都在Angular2中消失了。Angular2与经典Angular有根本性和根本性的不同。在Angular2中,核心概念是

  • 组件
  • 依赖注入
  • 捆绑

服务,工厂,提供者和常量的概念在Angular 1中受到了批评。很难在两者之间进行选择。删除它们可以简化事情。

在原始的Angular中,您将像这样定义服务

app.service('BookService', ['$http', '$q', BookService]);
function BookService($http, $q){
  var self = this;
  var cachedBooks;
  self.getBooks = function(){
    if (cachedBooks) {
      return $q.when(cachedBooks);
    }
    return $http.get('/books').then(function(response){
      cachedBooks = response.data.books;
      return cachedBooks;
    })
  }
}

Angular2极大地利用了ES6语法,使代码更易读和易于理解。

ES6中的一个新关键字是class,可以将其视为服务。

ES6类是对基于原型的OO模式的简单补充。具有单个方便的声明形式使类模式更易于使用,并鼓励了互操作性。类支持基于原型的继承,超级调用,实例以及静态方法和构造函数。

这是相同的代码在Angular2中的外观

import {HttpService, Promise}  from '../Angular/Angular2';
export class BookService{
    $http, $q, cachedBooks;
    constructor($http: HttpService, $q: Promise) {
        this.$http = $http;
        this.$q = $q
    }
    getBooks() {
    if (this.cachedBooks) {
        return this.$q.when(this.cachedBooks);
    }
    return this.$http.get('/books').then(function(data) {
        this.cachedBooks = data.books;
        return this.cachedBooks;
    })
  }
}
2020-07-04