“我真的需要后端的视图引擎吗?”
简短的回答是:是。
任何严肃的网络应用程序都需要视图引擎。没有视图引擎,就无法实现服务器端渲染。由于服务器端渲染 (SSR) 和单页应用程序 (SPA) 对于良好的 Web 应用程序都是必要的,因此应同时使用视图引擎和前端框架(AngularJS、React 等)。
例如,如果您想在用户未登录时显示“登录|注册”,并在用户登录时显示用户名信息。没有服务器端渲染,您必须向服务器发送1个Ajax请求并渲染根据 Ajax 响应的页面 - Ajax 请求将需要一些时间,并且相应的页面区域将是空白的,直到收到响应。这当然不是一种用户友好的行为。
另外,在一页中,如果要在用户角色为X时显示区域A、B、C、D,在用户角色为Y时显示区域B、D、E、F,并显示...服务端渲染,这将是一场噩梦——在收到带有用户角色的 Ajax 响应之前,不会决定最终的页面结构。
当然,如果你只需要“学习 AngularJS”,忽略视图引擎也是可以的。但是如果你正在开发一个产品,或者想了解一个严肃的 Web 应用程序是什么样的,你真的需要视图引擎。我相信这就是 Udemy 在他们的课程中包含视图引擎的原因。
如果服务器端渲染与单页应用程序一起使用,为了防止那些服务器端渲染的内容破坏 SPA 应用程序逻辑,您可以在脚本元素中渲染数据。这是一个简单的例子:
<script type="text/javascript">
window.userRoles = {= userRolesVar =} // {= =} is view engine tag and would be replaced by corresponding data during render.
</script>
这样一开始就返回userRoles数据,可以被AngularJS等SPA框架使用。不需要 Ajax 请求,这样的服务器渲染逻辑不会影响任何 SPA 代码。
@Ma Kobi 对于 AngularJS SPA 应用程序,您说得对,“整个 Web 应用程序是从后端交付到客户端的”。但是,一些服务器呈现的数据(用户角色等)应与应用程序一起发送到客户端。
此外,使用视图引擎并不意味着您必须为每个页面更改发送 HTTP 请求。 SPA运行后,除了最初的服务器渲染数据(上例)外,与Server Side Rendering无关。
@Gourav Soni 你可以将 AngularJS 与 Handlebar 一起使用,它不会在每次重新渲染页面时都重新加载页面。前端与后端分离是正确的设计,但这并不意味着视图引擎应该被丢弃。