×

EmberJS 教程

EmberJS 概述EmberJS 环境配置EmberJS 应用EmberJS 对象模型EmberJS 模板EmberJS 路由器EmberJS 组件EmberJS 模型EmberJS 视图EmberJS 控制器EmberJS 测试EmberJS 指定查询参数

Ember 对象模型

Ember 类的定义 初始化 继承Ember 类的扩展Ember 计算属性Ember 观察者Ember 数据绑定Ember 枚举Ember 第一章对象模型小结

Ember handlebars模板

Ember handlebars基础Ember handlebars条件表达式Ember handlebars遍历标签Ember handlebars显示对象键Ember handlebars属性绑定Ember {{link-to}} 助手Ember 路由 模板执行渲染顺序Ember {{action}} 助手Ember 表单元素Ember 调试助手Ember 工具类的助手Ember 第二章模板小结

Ember 路由

Ember 路由定义Ember 指定与路由关联的模型Ember 模板渲染Ember 路由重定向Ember 路由终止挑战和激活Ember loading error子路由Ember 查询参数Ember 异步路由

Ember 组件

Ember 组件定义Ember 属性传递Ember 包裹内容自定义包裹组件的HTML标签Ember 处理事件Ember action触发变化

Ember 控制器

Ember 控制器Ember 管理控制器的依赖关系

Ember 模型

Ember model简介Ember 定义模型Ember 记录查询Ember 新建、更新、删除记录Ember 设置记录到StoreEmber model的关联关系处理Ember 元数据Ember 自定义适配器Ember 自定义序列号器

Ember 测试

Ember 测试简介Ember 验收测试Ember 单元测试

Ember 路由重定向


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

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

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

1,切换路由前获取model

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

beforeModel() {
    this.transitionTo('posts');
}

2,切换路由后获取model

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

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

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

3,重定向到子路由

Router.map(function() {
    this.route('posts', function() {
        this.route('post', { path: '/:post_id'});
    }); 
});

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

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

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

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


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)