课程表

Ember.js 基础

Ember.js 对象模型

Ember.js handlebars模板

Ember.js 路由

Ember.js 组件

Ember.js 控制器

Ember.js 模型

Ember.js 测试

工具箱
速查手册

路由重定向

当前位置:免费教程 » JS/JS库/框架 » Ember.js

声明:对于transition这个词直译是“过渡”的意思,但是总觉得“路由的过渡”读起来总有那么一点别扭,想了下于是就用“切换”替代吧,如有不妥欢迎指正。

我们熟知的Java、PHP等语言都提供了URL的重定向,那么Ember的重定向又是怎么去实现的呢?

如果是从路由重定向到另外一个路由你可以调用transitionTo方法,如果是从controller重定向到一个route则调用transitionToRoute方法。transitionTo方法所实现的功能与link-to的作用是一样的,都可以实现路由的切换。 如果重定向之后的路由包含有动态段你需要解析model数据或者指定动态段的值。由于不是直接执行URL所以不会执行重定向之后的路由的model回调。

1,切换路由前获取model

如果你想在路由切换的时候不加载model你可以调用beforeModel回调,在这个回调中实现路由的切换。

  1. beforeModel() {
  2. this.transitionTo('posts');
  3. }

2,切换路由后获取model

有些情况下你需要先根据model回调获取到的数据然后判断跳转到某个路由上。此时你可以使用afterModel回调方法。

  1. afterModel: function(model, transition) {
  2. if (model.get(‘length’) === 1) {
  3. this.transitionTo('post', model.get('firstObject'));
  4. }
  5. }

切换路由,并初始化数据为model的第一个元素数据。

3,重定向到子路由

  1. Router.map(function() {
  2. this.route('posts', function() {
  3. this.route('post', { path: '/:post_id'});
  4. });
  5. });

子路由的重定向有些许不同,如果你需要重定向到上面这个段代码的子路由posts.post上,如果是使用beforeModelmodelafterModel回调重定向到posts.post父路由posts会重新在执行一次,再次执行父路由这种方式就显得有点多余了,特别父路由需要加载的数据比较多的时候,会影响到加载的效率。 如果是这种情况我们可以使用redirect回调,此回调不会再次执行父路由。仅仅是实现路由切换而已。

  1. redirect: function(model, transition) {
  2. if (model.get('length') === 1) {
  3. this.transitionTo('posts.post', model.get('firstObject'));
  4. }
  5. }

重定向到子路由,解析之后会得到的类似于posts/2这种形式的URL。

以上就是全部路由的重定向方式,主要有4个回调:beforeModelmodelafterModelredirect。前面三种使用场景差别不大,redirect主要用于重定向到子路由。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号