我正在使用Ember.js,我试图让我的页面在导航栏下面显示页面的标题。为了使这个工作,我试着使用模型挂钩,并在 application.hbs 文件中显示它。
到目前为止,我已经尝试了不同的方法:
- 路由/联系人.js*
import Route from '@ember/routing/route';
export default class ContactRoute extends Route {
model() {
return 'Title of page';
}
}
- 模板/应用程序.hbs*
<div>
<NavBar />
<div class="pageTitle">
<h2>
<p>{{@model}}</p>
</h2>
</div>
<div class="body">
{{outlet}}
</div>
</div>
我大多数时候都是在 application.hbs 中使用 @model,比如 outlet.@model。但是所有这些尝试都导致了空的标题或者模板编译器错误。有人有解决这个问题的方法吗?最好是不涉及jquery的方法。
2条答案
按热度按时间yhxst69z1#
如果我正确理解了您要完成的任务,那么这是services的一个很好的用例。
你需要两个部分:一个服务来跟踪页面标题,然后你需要在应用程序控制器中注入这个服务,这样模板就可以访问这个服务,同时你还需要在路由中注入页面标题服务,这样你就可以在相应的钩子中更新页面标题。
1.寻呼服务
1.应用控制器和模板
第一个
我已经把所有这些放在一个交互式的Ember Twiddle demo中。
希望这对你有帮助!
tez616oj2#
由于您已经创建了名为
contact
的新页面(路由),因此页面的UI部分必须位于相应的模板文件中,即templates/contact.hbs
和而不是templates/application.hbs
,因为templates/contact.hbs
文件只能访问routes/contact.js
的@model
即,下面的标记必须在
templates/contact.hbs
文件中,并将在访问http://localhost:4200/contact处的页面时显示此外,请注意,
templates/contact.hbs
文件中的标记将呈现在应用程序模板的{{outlet}}
位置(请参阅此处)有关详细参考,请查看此twiddle