几个月前,我决定学习英语.当我在做一些改进并使用它创建一些应用程序时,我意识到Angular 2在开发者预览中,所以它发布只是时间问题.因为Angular 2不会与Angular 1兼容,而且有很多变化,问题是,继续开发Angular 1是否更好.x还是开始开发Angular 2?

事实是,我们不必总是使用市场上最新的版本或最新的语言,但在这种情况下,这款应用程序仍然很小,所以我可以毫不费力地进行更改.

推荐答案

让我先说一句,我假设你和所有读这篇文章的人都已经习惯了Angular 1(now referred to as AngularJS,而不是新版本的Angular).这就是说,让我们来看看Angular 2+中的一些加法和关键区别.

  1. They added an angular 100.

你可以通过运行ng new [app name]来启动一个新项目.

  1. Your angular code is written in ES6 Typescript and it compiles at runtime to Javascript in the browser.

要完全掌握这一点,我建议查看我答案底部的一些资源列表.

  1. Project Structure

在一个基本 struct 中,你将有一个app/ts文件夹,你将在其中完成大部分工作,还有一个app/js文件夹,扩展名为.js.map.它们会将".ts"文件"映射"到浏览器进行调试,因为浏览器无法读取本机typescript.

Update:已经过了测试版.在大多数情况下,项目 struct 发生了一些变化,如果您使用angular cli,您将在

app.component.css 
app.component.html
app.component.spec.ts
app.component.ts 
app.module.ts
index.ts

app.component.css:你应该使用特定于component.html的CSS文件

app.component.html:视图(在app.component.js中声明的变量)

app.component.spec.ts:用于测试app.component.ts

app.component.ts:绑定到app.component.html的代码

app.module.ts:这就是你的应用程序的启动,以及你定义所有插件、组件、服务等的地方.这相当于Angular 1中的app.js

index.ts用于定义或导出项目文件

Additional information:

此外,tsconfig.json文件也很重要,因为它为您的项目定义了TS编译规则.

如果你想I have to learn a whole new language?...UH在某种程度上,TypeScript是JavaScript的超集.不要被吓倒;它可以让你的发展更容易.在玩了几个小时后,我感觉自己对它有了很好的理解,三天后,我就把它弄得一塌糊涂了.

  1. You bind to your HTML similarly like how you would if in an Angular 1 directive. So variable like 100 and 101 have been deprecated.

这一次你可能被暗示了.Angular 2仍然是MV*,但是您将使用‘components’作为将代码绑定到模板的一种方式,例如,请执行以下操作

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

    @Component({
         selector:'my-app',
         template: '<h1> Hello World! </h1>'
    })

    export class AppComponent {}

这里,将import语句视为v1控制器中的依赖项注入.你使用importimport个包,其中import {Component}表示你将制作一个component,你想绑定到HTML.

注意@Component装饰师,你有selectortemplate.这里,把selector想象成$scope,就像v1directives一样,其中selector的名字是用来绑定HTML的

<my-app> </my-app>

其中<my-app>是您将使用的自定义标记的名称,它将用作模板中声明内容的占位符.即)<h1> Hello World! </h1>.而在v1中,这将如下所示:

HTML

<h1>{{hello}}</h1>

JS个个

$scope.hello = "Hello World!"

您还可以在这些标记之间添加一些内容,以生成加载消息,如下所示:

<my-app> Loading... </my-app> 

然后它将显示"Loading..."作为加载消息.

请注意,在template中声明的是路径或原始HTML,您将在HTML in selector标记中使用它.


Angular 1的更完整实现看起来更像这样:

HTML

<h1 ng-controller="myCtrl">{{hello}}</h1>

在v1中,这看起来像

JS个个

angular.module('controller', [])



.controller('myCtrl', function( $scope) {
    $scope.hello = "Hello World!"
})

这就是我真正喜欢v2的地方.我发现在v1中,指令对我来说是一个陡峭的学习曲线,即使当我弄明白它们时,我经常使用CSS渲染,而不是我想要的.我发现这更简单.

V2允许你的应用更容易扩展,因为你可以比v1更容易地分解你的apply.我喜欢这种方法,因为您可以将所有工作部件放在一个文件中,而不是放在多个文件中.

What about converting your project from v1 to v2?


根据我从开发团队那里听到的消息,如果您想将您的v1项目更新到v2,您只需判断并删除不推荐使用的BLOB,并用selector替换您的$scope.我觉得这段视频很有帮助.这是与一些ionic 团队,谁是并肩工作的Angular 团队,因为v2有更强的重点在移动https://youtu.be/OZg4M_nWuIk希望,这是有帮助的.

UPDATE:随着Angular 2的正式实现浮出水面,我通过添加示例进行了更新.

UPDATE 2:这似乎仍然是一个很受欢迎的问题,所以我只是想找一些在我开始使用angular 2时发现非常有用的资源.

Helpful Resources:

要了解更多关于ES6的信息,我建议大家看看新的Boston's ECMAScript 6 / ES6 New Features Tutorials - YouTube Playlist

要编写TypeScript函数并查看它们如何编译为Javascript,请参阅Typescript language Playground

要查看Angular 2中Angular 1类似功能的函数分解,请参见Angular.io - Cookbook -A1 A2 Quick Reference

Angular相关问答推荐

Angular中绑定嵌入标签src属性的问题

如何使用新的@for遍历Angular 为17的对象?

CDK虚拟滚动由于组件具有注入属性而在滚动时看到错误的值

如何将管道异步化添加到不在html模板中的观察对象的Angular ?

从Angular 前端访问ASP.NET Core 8 Web API时出现CORS错误

如何将Angular 服务包含在延迟加载的独立组件路由中?

Angular 单位测试表

如何将 Angular 中的导航路由到同一页面并重新加载

Angular 16:信号更新未能更新视图

nx workspace angular monorepo 在创建新应用程序时抛出错误

如何禁用特定数据集图表js的默认标签

Renderer2.appendChild 没有按预期工作?

如何使用 Angular 12 material 验证密码和确认密码?

最新版本的 Chrome ERR_TIMED_OUT

使用 Jasmine 和 Karma 对 Angular 进行单元测试,错误:无法绑定到xxx,因为它不是xxxxxx的已知属性.

由router-outlet 创建时如何将css类应用于组件元素?

ngx-toastr,Toast 未在 Angular 7 中显示

Mat-autocomplete - 如何访问选定的选项?

Angular 2表单验证重复密码

如何从materialAngular使用分页器?