如果我使用Angular作为前端技术,是否还需要使用ejs或layouts呢?

3

目前我在后端使用的是Sails,它自带一个非常整洁的ejs视图引擎和模板系统。然而,在前端设置Angular会妨碍这些功能。

例如,如果我在 layout.ejs 中包含<html ng-app="myApp"> ,那么Angular将无法初始化,因此我不能再使用模板了。

同样的问题也出现在包含任何ejs模板时。

所以现在我在 assets 文件夹中创建了一个 index.html 文件,关闭了Sails路由和布局,并且纯粹地使用Angular。对于我的当前项目来说,这样做很好(除了我不能像我习惯的那样使页面整洁,需要在那里添加样板html等),但是在其他项目中会有问题吗?

换句话说,如果不使用ejs,我会错过什么?我的Sails控制器如何与视图交互?还是我不需要?

3个回答

4

首先,这个问题有很多不同的解释,取决于各种变量。

如果您仅将您的应用程序用作JSON提供API,则实际上您不需要使用模板引擎。因此,您的问题的基本前提是有效的。

然而,仍有许多理由使用模板引擎。

例如,您仍然可以使用EJS为您的angular站点设置默认布局和索引页面。

例如,如果我在layout.ejs内部有“<ng-view>”,Angular将永远不会初始化,那么我就不能再使用模板了。

这个说法完全错误。我在SPA中使用服务器渲染模板来为我的index页面使用app版本来指向更新的资产和模板文件。这样,当我更新应用程序时,旧的模板文件将不会被缓存。根据应用程序的不同,索引页面可能是唯一一个使用模板引擎的页面,因为其他所有页面都使用静态模板。有时我还会让服务器使用模板引擎渲染我的模板(例如:如果我想根据用户角色限制模板的某些方面)。

还有其他原因。您可以尝试sails的Google组,因为这是一个开放性的问题。

https://groups.google.com/forum/#!forum/sailsjs


哦,谢谢。嗯,这个语句本身并没有错,因为我已经测试过了,但我明白你的意思,也就是说有一种设置方式可以让它工作。我可以问一下那个结构大致是什么样子吗?如果我在布局文件中“初始化”Angular,我需要做些什么才能让它工作? - Yeats
这取决于您的设置。如果您想为您的单页应用程序使用服务器生成的索引页面,那么您首先需要创建一个顶级策略来检查请求是否要求JSON。如果不是,则需要重定向到index.html。这假设您仅有一个HTML页面,即索引页面。否则,您可以按照Sails网站上记录的方式设置布局/索引页面,以插入脚本和CSS。您还可以创建自己的grunt/gulp任务来呈现ng-templates。正如我所说,这是一个比较长的问题/答案。如果您想获得更全面的答案,请尝试Google Groups。 - Meeker

2
如果你使用Angular作为前端和SailsJs作为后端,最好的做法是拥有两个不同的应用程序,这意味着你不需要使用sails来渲染视图(无需强制使用EJS)。据我所知,SailsJS只需用作REST API,而Angular需要渲染你的视图(你可以使用http.post、get、put和delete与API通信)。
最好的问候。

这不是最佳实践,但确实是一种实践方法。事实上,在NG-Europe的双击团队中,他们谈到了一种在将模板发送给客户端之前在服务器上修改模板的方法。 - Meeker
显然,你可以使用Angular/EJS或Sails的任何模板处理功能,但是如果他想要优化响应时间,他应该将Sails用作REST API。 你所说的方法只是所谓的模板处理,据我所知,它需要更多的时间来渲染视图并发送它,而不是发送JSON输出并仅加载需要更新的DOM部分。 如果流行的人或一群人谈论某种做法,这并不总是最佳实践,请将其视为建议性用法。祝您拥有愉快的一天。 - Mehdi Aïssani

2
因为 sails.js 是后端框架,而 Angular.js 是前端框架,它们可以很好地协作。
你只需要将你的 Angular 文件和逻辑放置在 myapp/assets 文件夹中。Assets 文件夹默认情况下可在 sails 服务器的 URL 上访问。
你可以通过 http://localhost:1337/assets/file_name 访问它。
至于 ejs,如果你使用任何 JavaScript 框架,如 angular.js,则不是必需的,因为所有 JSON api 都将在 sails 框架中创建并以 JSON 格式提供数据给 Angular。

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