angular2是mvc吗?

angular2是mvc吗?,angular,Angular,我在Angular 1中工作过。它显然有一个控制器,充当视图和模型之间的中介。我意识到在Angular 2中我们没有任何控制器 那么我们还能称Angular 2为MVC框架吗?。我知道MVC是一种设计模式,您可以用任何语言实现它。但是,关于Angular 1,我从很多人那里听说它是一个MVC框架,我看到的大多数例子都清楚地表明Angular 1是MVC,Controller将模型和视图分开。所以,我想知道,现在有了Angular2的组件,我们还能称之为MVC吗?或者组件本身遵循MVC范式,因为我

我在Angular 1中工作过。它显然有一个控制器,充当视图和模型之间的中介。我意识到在Angular 2中我们没有任何控制器


那么我们还能称Angular 2为MVC框架吗?。我知道MVC是一种设计模式,您可以用任何语言实现它。但是,关于Angular 1,我从很多人那里听说它是一个MVC框架,我看到的大多数例子都清楚地表明Angular 1是MVC,Controller将模型和视图分开。所以,我想知道,现在有了Angular2的组件,我们还能称之为MVC吗?或者组件本身遵循MVC范式,因为我确实看到在每个组件中我们都有单独的视图和数据并使用绑定,也许我们仍然可以将其称为MVC

组件和指令是控制器,Angular处理的模板(HTML)和浏览器是视图,如果不将模型与控制器相结合,就会得到MVC模式。

Angular 2更像是基于组件的体系结构。您可以假设一切都是组件,比如指令、服务等等。 虽然指令和服务实际上是为了支持基本组件,但它们也是以类似的方式定义的。 基本组件包含依赖项、视图详细信息和类声明,可以将其视为控制器。 因此,一个定义良好的组件包含一组MVC体系结构

例如(角度2 alpha版本):

在上面的示例中,您可以看到类“home”可能被假定为控制器,视图是用@View decorator编写的。组件定制由@component decorator提供。 您还可以看到不同的依赖注入实践

编辑:: 示例(当前角度2/4版本)


简而言之,angular 2是一个基于组件的MVC框架。

angular 2在内部遵循MVC,因为它的组件遵循完整的MVC架构

但如果你说我们在angular2做的是MV*。它可以是MVVM或MVC。它不是完全的MVC


这不是很有帮助,但我认为它被称为MV*(或MVAngular2)框架,因此您在如何实现最后一部分方面有一些许可证。angular2文档对该体系结构有很好的概述。可以在此处找到:。虽然ANGARLU2是基于组件的,但是您仍然有单独的视图、视图的独立范围和允许您连接到后端的服务。服务将是您的模型,组件是控制器和视图的混合体。您将大多数函数逻辑和“控制器”函数放在类中,并通过模板将视图附加到类中。请按照链接进行解释:@Morgan G Services绝对不是模型。在所有与MVC相关的框架(包括MVVM等)中,您有两个模型。第一个是领域模型。第二个是使域模型适应视图的模型。在MVVM中,这是ViewModel。许多人也开始在straight MVC中使用术语ViewModel。我认为@View已从Angular 2中删除。@Phil,但组件中的模板文件充当viewsV和C。那么M呢?要么创建一个组件(作为服务)用作存储,要么使用第三方存储库(如redux)。我在web上的许多示例中看到,人们使用瞬态服务(每个组件单独的实例)来定义http方法来访问服务器上的数据,然后这些数据直接存储在视图组件中。在这种情况下,您根本没有模型层,因此要协调多个视图的显示,您要么必须有单独的视图直接相互对话,要么通过服务器往返每个交互。试图说服我的团队,这不是一个适合丰富交互SPA的方法,我们需要的是一个合适的模型层,这是不可能的。服务就是模型就是一切。如果显示相同的数据,则只需与多个组件共享一个服务。通常,使用可观察对象来通知视图服务的更改是一个好主意。有些人将业务逻辑放在组件中,另一些人更喜欢保持组件沉默,并在服务中包含业务逻辑。您可以有多个级别的服务(取决于您提供服务的位置)。您可以直接在组件上提供服务(为每个组件实例获取另一个实例),也可以通过在
@NgModule()
import {Component, View, bootstrap, provide, NgClass} from 'angular2/angular2';

@Component({
  selector : "my-home"
})

@View({
   directives : [NgClass, EditSettingPanel],
   styles: ['.hidden{ display : none} .visible{ display : block}'],
   templateUrl : "views/blog-panel.html"
})
export class home {
}

}
import { Component } from '@angular/core';

@Component({
  selector: 'custom-component',
  templateUrl: './template.html',
  styleUrls: ['./style.scss'],
})
export class CustomComponent {}