Angular 2 - ASP.NET MVC 应用程序 - 非单页面应用

4
使用Angular 1,我可以像这样在body中定义我的应用程序:<body ng-app="myapp"> 然后我可以在MVC应用程序的不同视图中加载不同的控制器。
比如说,在Home/Index视图中,我将加载一个控制器,在Home/About中,我可以加载另一个控制器并执行不同的逻辑。
我试图理解Angular 2,但我有一种感觉,它只能做SPA?你在开玩笑吗?如果我不想构建SPA,基本上我必须复制我的代码并为每个视图创建一个新的angular应用程序。是这样吗?你只需要构建SPA吗?
如何在我的MVC应用程序之上使用Angular 2,使用所有MVC功能,如路由等?

1
你一定是在错误的方式下使用Angular。Angular(1和2)是单页应用程序框架,应该只用于这个目的。Angular应用程序需要加载/渲染很多依赖项来处理每个请求。这些完整的JS框架(如Angular、React,甚至ASP.NET(Core)MVC)都有非常明确的观点,并且对如何使用它们有一定的哲学,只要您遵循这些观点,就不会出现任何问题,但如果您试图远离预期的使用方式,只会让自己更加困难。 - Tseng
1
你尝试过使用vue.js吗?它在模板中具有类似Angular的语法,但是没有控制器,只需使用new Vue{...}来创建组件,非常轻量级。https://vuejs.org - Tseng
2
@Tseng:那不完全正确!我已经成功地使用过Angular 1,并与ASP.NET MVC一起使用,在需要丰富用户交互时填补空白。 Angular并不仅仅用于单页应用程序,请原谅。 - user2818430
就像我说的,如果你反对它的SPA本质,那么你就是在反对它的预期使用方式。它遭受了ExtJS所遭受的相同缺点,只是程度较低。ExtJS非常适合制作具有Windows / Desktop外观和感觉的Web应用程序,但每个请求所需的JS文件数量非常高,即使进行模块化处理,页面渲染并获取所有依赖项也需要几秒钟(> 2)。我制作了一些Angular(以及过去的ExtJS)应用程序。使用它们两者的唯一合理方式是在SPA中。 - Tseng
因为这样,您就可以在基本依赖项和当前使用的模块上有一个长时间的加载(约2秒),然后按需动态加载其他模块和组件(替换旧版Angular中的控制器),并通过ajax与REST api进行通信,而无需重新加载浏览器中的当前页面。速度非常快,客户端导航是瞬间完成的(如果不计算其余数据的加载)。 - Tseng
1个回答

2
感觉你的MVC控制器返回了一个完整的应用程序页面,并且该页面需要自己的API。但是你可以通过任何链接路由到MVC框架后面,你不必使用Angular路由。在Angular和非Angular世界之间切换的成本非常高。也许在将来的Angular版本中,这个成本会更低。无论如何,多页应用程序的概念目前还很初级,服务器端渲染尚未得到该框架的支持。它应该会在未来的版本中出现。
资源:

嗯,虽然 ASP.NET Core 有一定的服务器端渲染支持。https://github.com/aspnet/JavaScriptServices。基本上,Angular2 应用程序通过 node.js 在服务器上运行,ASP.NET Core 将为第一次代理(如果应用程序设计为具有客户端路由),并且一旦加载了依赖项,将继续使用客户端。没有客户端路由,每个请求都将在服务器端呈现整个页面。 - Tseng
@Tseng,我不确定你(或我)所说的服务器端渲染是什么意思,但他们的意思是“在运行时在服务器上执行JavaScript”,但没有任何关于客户端-服务器通信/协议的线索。如果Angular SPA页面的加载成本很低(小于1秒),那么这实际上就是MVC应用程序所需要的。然而,MVC应该被设计为与客户端无缝通信,以更新每个单独操作所需的信息(如SPA),并具有与服务器上托管的其他SPAs交互的可能性。 - Roman C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接