(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:两个还没有正式发布的东西一起用,是什么效果?

效果当然会很好了(我猜的),那么如何在ASP.NET Core中集成Angular 2呢?Nicolas Bello Camilletti的一篇文章就给大家分享了一些技巧。

作为微软全新的Web开发框架,ASP.NET Core项目的结构不仅和node.js有几分神似,也同样利用了大量的第三方开源工具来辅助客户端库的安装和任务执行,比如npm和bower(用于依赖管理和安装),gulp用于任务执行。

所以在ASP.NET Core项目中安装Angular 2也自然而然是通过npm来进行咯。具体步骤如下:

  1. 通过VS2015或者yeoman新建一个ASP.NET Core的Web项目
  2. 在VS2015中展开项目下的“Dependencies”,在“npm”上点击右键,选择“Open package.json”或者直接到项目文件夹里打开package.json文件
  3. 编辑package.json文件,在devDependencies下面添加“angular2”的配置(我在写这篇文章的时候,版本号是"2.0.0-beta.9")和“systemjs”(一个轻量级ES6模块加载器),保存,VS会自动调用npm install来安装angular及其依赖的包。
  4. 由于通过npm引入的包,其只会下载到node_modules里面,我们还需要通过gulp任务把所需要的文件copy到wwwroot下才能被浏览器访问到。这个时候,打开gulpfile.js这个文件,在文件末尾添加上下面的代码:
  5.    1: paths.npmSrc = "./node_modules/";

       2: paths.npmLibs = paths.webroot + "lib/npmlibs/";

       3:  

       4: gulp.task("copy-deps:systemjs", function () {

       5:     return gulp.src(paths.npmSrc + '/systemjs/dist/**/*.*', { base: paths.npmSrc + '/systemjs/dist/' })

       6:          .pipe(gulp.dest(paths.npmLibs + '/systemjs/'));

       7: });

       8:  

       9: gulp.task("copy-deps:angular2", function () {

      10:     return gulp.src(paths.npmSrc + '/angular2/bundles/**/*.js', { base: paths.npmSrc + '/angular2/bundles/' })

      11:          .pipe(gulp.dest(paths.npmLibs + '/angular2/'));

      12: });

      13:  

      14: gulp.task("copy-deps:es6-shim", function () {

      15:     return gulp.src(paths.npmSrc + '/es6-shim/es6-sh*', { base: paths.npmSrc + '/es6-shim/' })

      16:          .pipe(gulp.dest(paths.npmLibs + '/es6-shim/'));

      17: });

      18:  

      19: gulp.task("copy-deps:rxjs", function () {

      20:     return gulp.src(paths.npmSrc + '/rxjs/bundles/*.*', { base: paths.npmSrc + '/rxjs/bundles/' })

      21:          .pipe(gulp.dest(paths.npmLibs + '/rxjs/'));

      22: });

      23:  

      24: gulp.task("copy-deps", ["copy-deps:rxjs", 'copy-deps:angular2', 'copy-deps:systemjs', 'copy-deps:es6-shim']);

  6. 你可以手动通过在gulpfile.js文件上点击右键选择Task Runner Explorer来执行“copy-deps”,也可以把这个任务添加到project.json中的scripts/prepublish里面。
  7. 不管采用什么方式,现在在wwwroot/lib/npmlibs下面已经出现了angular2相关的js文件,我们还需要把他们引用到Layout.cshtml中(放到head结束之前):
  8.    1: <environment names="Development">

       2:   <script src="~/lib/npmlibs/es6-shim/es6-shim.js"></script>

       3:   <script src="~/lib/npmlibs/systemjs/system-polyfills.src.js"></script>

       4:   <script src="~/lib/npmlibs/angular2/angular2-polyfills.js"></script>

       5:   <script src="~/lib/npmlibs/systemjs/system.src.js"></script>

       6:   <script src="~/lib/npmlibs/rxjs/Rx.js"></script>

       7:   <script src="~/lib/npmlibs/angular2/angular2.js"></script>

       8:   <script src="~/lib/npmlibs/angular2/router.js"></script>

       9: </environment>

      10:  

      11: <environment names="Staging,Production">

      12:   <script src="~/lib/npmlibs/es6-shim/es6-shim.min.js"></script>

      13:   <script src="~/lib/npmlibs/systemjs/system-polyfills.js"></script>

      14:   <script src="~/lib/npmlibs/angular2/angular2-polyfills.min.js"></script>

      15:   <script src="~/lib/npmlibs/systemjs/system.src.js"></script>

      16:   <script src="~/lib/npmlibs/rxjs/Rx.min.js"></script>

      17:   <script src="~/lib/npmlibs/angular2/angular2.min.js"></script>

      18:   <script src="~/lib/npmlibs/angular2/router.min.js"></script>

      19: </environment>

  9. 至此,Angular2就添加到ASP.NET Core项目中了。如果你打算用TypeScript来编写的Angular2代码,那么还需要额外对TypeScript进行配置:通过VS2015的添加新文件的功能添加一个tsconfig.json文件(TypeScript JSON Configuration File),额外添加修饰声明,并配置systemjs作为模块加载器。完整代码如下:
  10.    1: {

       2:   "compilerOptions": {

       3:     "noImplicitAny": false,

       4:     "noEmitOnError": true,

       5:     "removeComments": false,

       6:     "sourceMap": true,

       7:     "target": "es5",

       8:     "emitDecoratorMetadata": true,

       9:     "experimentalDecorators": true,

      10:     "module": "system",

      11:     "moduleResolution": "node"

      12:   },

      13:   "exclude": [

      14:     "node_modules",

      15:     "wwwroot/lib"

      16:   ]

      17: }

  11. 添加TypeScript支持后,你会发现编译出错,这是因为没有引入es6-shim的DefinitelyTyped定义。要引入定义,需要在项目上打开命令行,执行“npm install tsd --save-dev”来安装tsd(TypeScript Definition manager),然后再执行“tsd install es6-shim --save”来安装es6-shim的TS定义。这样就可以解决编译出错的问题了。
  12. 这样,我们就可以使用TypeScript来编写Angular2的组件,组件代码如下(放到wwwroot/app/app.component.ts):
  13.    1: import {Component} from 'angular2/core';

       2:  

       3: @Component({

       4:     selector: 'my-app',

       5:     template: '<h1>My First Angular 2 App</h1>'

       6: })

       7: export class AppComponent { }

  14. 在wwwroot/app中添加一个boot.ts文件作为Angular2应用程序的启动点:
  15.    1: import {bootstrap}    from 'angular2/platform/browser'

       2: import {AppComponent} from './app.component'

       3:  

       4: bootstrap(AppComponent);

  16. 然后在视图中通过systemjs来加载这些组件了(记得先添加<my-app></my-app>这样的HTML标记,因为我们组件的选择器是my-app):
  17.    1: @section Scripts {

       2:     <script>

       3:         System.config({

       4:             packages: {

       5:                 'app': { defaultExtension: 'js' },

       6:                 'lib': { defaultExtension: 'js' },

       7:             },

       8:         });

       9:  

      10:         System.import('app/boot')

      11:             .then(null, console.error.bind(console));

      12:     </script>

      13: }

  18. 最后,我们就完成了在ASP.NET Core中开发Angular2应用程序的基本代码结构了(注意调试的时候不能使用IE,不然会报错,只能使用Edge或者Chrome之类)。

ASP.NET Core和Angular 2双剑合璧的更多相关文章

  1. 学习ABP ASP.NET Core with Angular 环境问题

    1. 前言 最近学习ABP架构 搭建ASP.NET Core with Angular遇到了些问题,折腾了一个礼拜最终在今天解决了,想想这个过程的痛苦就想利用博客记录下来.其实一直想写博客,但因为 时 ...

  2. 从零开始一个个人博客 by asp.net core and angular(一)

    这是一个个人叙述自己建设博客的帖子,既然是第一篇那肯定是不牵扯代码了,主要讲一下大体的东西,微软最新的web框架应该就数asp.net core 3.1了这是一个长期支持版,而且是跨平台又开源版本,所 ...

  3. 从零开始一个个人博客 by asp.net core and angular(三)

    这是第三篇了,第一篇只是介绍,第二篇介绍了api项目的运行和启动,如果api项目没什么问题了,调试都正常了,那基本上就没什么事了,由于这一篇是讲前端项目的,所以需要运行angular项目了,由于前端项 ...

  4. 主厨(第4部分)- ASP. netNET Core和Angular 2 CRUD SPA

    下载source - 79.7 KB 介绍 在Master Chef(第1部分)和Master Chef(第2部分)中,我介绍了如何使用ASP.Net Core和Angular JS.在Master ...

  5. 52ABP模板 ASP.Net Core 与 Angular的开源实例项目

    阅读文本大概需要 5 分钟. 开始之前 自从上一篇文章".NET:持续进化的统一开发平台"发布后,已经有三个月的时间没有写过文章了. 这段时间,做了两场线下活动,一场在上海,一场在 ...

  6. 从零开始一个个人博客 by asp.net core and angular(二)

    上一篇帖子讲了用了哪些技术,这个帖子就先介绍介绍api项目吧,项目就是一个普通的webapi项目,账户系统用的identity ,什么是identity呢? 其实就是官方封装好的一系列的可以用来操作数 ...

  7. ASP.NET Core文章汇总

    现有Asp.Net Core 文章资料,2016 3-20月汇总如下 ASP.NET Core 1.0 与 .NET Core 1.0 基础概述 http://www.cnblogs.com/Irvi ...

  8. Angular 5和ASP.NET Core入门

    我希望你们都知道Angular 5已经发布了.在本文中,我们将看到如何使用Angular5TemplateCore开始使用Angular 5和ASP.NET Core. 使用Angular5Templ ...

  9. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

随机推荐

  1. js学习笔记9----时间操作

    1.时间操作函数如下: new Date();   //获取系统时间 getFullYear(); //年 getMonth()+1; //月,初始值为0 getDate(); //日 getDay( ...

  2. 使用Python进行描述性统计

    目录 1 描述性统计是什么?2 使用NumPy和SciPy进行数值分析 2.1 基本概念 2.2 中心位置(均值.中位数.众数) 2.3 发散程度(极差,方差.标准差.变异系数) 2.4 偏差程度(z ...

  3. 最简单的JavaScript模板引擎

    在小公司待久了感觉自己的知识面很小,最近逛博客园和一些技术网站看大家在说JavaScript模版引擎的事儿,完全没有概念,网上一搜这是08年开始流行起来的...本来以为这是很高深的知识,后来在网上看到 ...

  4. IE浏览器不能访问网页,google可以访问

    现象:google浏览器可以进行网络访问,ie不能访问 原因:代理服务修改了局域网配置脚本 解决: Internet选项---连接---局域网设置: 去除勾选 “使用自动配置脚本”

  5. 将DataTable生成树json

    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ListMenu(); } } protected ...

  6. ARCGIS常用几种本地数据AE初始化

    1.Personal GDB 新建一个在E盘的名为test的mdb: IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryCl ...

  7. 自定义checkbox风格

    1.在drawable中创建文件checkbox_selector.xml: <?xml version="1.0" encoding="utf-8"?& ...

  8. Nessus的安装/激活/更新

    0x1,安装 百度:Nessus,随意下载一个就好了. 0x2,激活 开启代理,获取register code,如图: 获取到register code,填写,进行激活,意外报错: NOTICE: A ...

  9. TransactionScope 之分布式配置

    .Net开发过程中,涉及多个数据库和不同数据库的分布式事务(Distributed Transaction)开发,有时会碰到“与基础事务管理器的通信失败”的错误.导致这个错误一般有下列三个原因:1)  ...

  10. 在 Github 上找「好东西」的方法

    使用 Github 的站内搜索,搜索: Awesome + 你的关键字