我是SailsJS的新手,所以我有一个关于渲染部分视图的问题。
我来自.NET世界,在ASP.NET MVC中的局部视图比在sails中要聪明得多。在.NET MVC中,我可以提供一些控制器作为部分视图路径,这个控制器将被执行,部分视图将用控制器数据呈现。
例如,我想在我的网站的角落显示一些帐户信息。因此,在.NET中,我可以调用部分视图,提供控制器路径,这个控制器将查询帐户信息,将其提供给部分视图,然后将结果插入到主视图中。在Sails中,我可以调用局部视图,但是局部视图的所有数据(局部变量)都将从主视图推送到那里。所以我必须在应用程序中的每个控制器中放入帐户信息?
我该如何解决这个问题?在其他问题中,我发现我可以从req.session获取用户名,但它并不能解决所有情况。例如,我如何在页脚中显示三个随机的主题?
发布于 2016-12-09 22:10:28
我认为你在局部视图上看错了地方。这是一个前端问题,我在这种局部视图中使用的是Angular UI- .What。实际上,我不确定使用angular是否在解决方案的范围内,所以我将保持简短。如果你觉得我的方法有用,你可以评论它,我将进一步详细说明如何做到这一点。
发布于 2017-10-27 22:36:32
取决于您使用的模板引擎。
对于ejs,您可以使用<%- include('someview') %>或<%- include('someview', { mydata: { foo: bar} }) %>,后者允许使用diff数据多次调用包含文件。例如,<%- include('someview', { mydata: foo }) %>会将foo (从本地变量)复制到mydata键。这将被添加到本地变量中,因此所有其他本地变量也都可用。
至于提供实际数据,您可以使用sails服务。只需将数据添加到res.locals.myKeyForTheInclude。
您每次都必须调用该服务。但您可以将其作为中间件添加到config/http中。
middleware: {
myFoo: myService.myFunc,
order: [
...
'myFoo', // before router
'router',
...
],剩下的就是每个模板都需要包含。这是无法避免的,只有模板知道include应该放在哪里。但是如果你使用一个布局,它可能会适合这个布局。
https://stackoverflow.com/questions/33524887
复制相似问题