当您尝试从父路由转换到同一路由时,未触发afterModel挂钩。
我希望afterModel挂钩总能触发。
修改 这有点难以理解,除非你能看到旋转,但这里是代码
// Controller/application.js
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
actions: {
goTo() {
this.transitionToRoute('food');
}
}
});
// templates/application.hbs
<button onclick={{action 'goTo'}}>Food Options</button>
<br>
{{outlet}}
//router.js
const Router = Ember.Router.extend({
location: 'none',
rootURL: config.rootURL
});
Router.map(function() {
this.route('food', function() {
this.route('options');
this.route('fruits');
this.route('veggies');
});
});
//routes/food.js
export default Ember.Route.extend({
model() {},
afterModel() {
this.transitionTo('food.options');
}
});
第一次单击食物选项按钮正确调用食物路线中的afterModel。第二次单击它不会触及afterModel。
答案 0 :(得分:2)
参考AlexSpeller Diagonal查看给定余烬路径定义的路径结构,模板和路由挂钩。它是一个很棒的路线结构图形表示。
问题:
我在食物/水果的食物之下。如果我单击按钮 再次,我希望被带到食物路线,然后重定向到 选项
答案:food
路由没有URL,因为它是父路由。你将永远处于这条路线的孩子状态(例如food.index)。因此,当您说transitionTo('food')
表示您正在转换到food.index
路线时。
网址/food/fruits
- 将执行food
模型挂钩和fruits
模型挂钩。
URL /food
- 将执行food/index
模型挂钩,它不会执行food
模型挂钩。
因此,在您的情况下,您可以从this.transitionTo('food.options')
food
挂钩中删除afterModel
,然后您可以介绍food.index路线,其中包含食物选项。
查看包含索引路由的修改后的ember twiddle。