路由器通过 willTransition 阻止转换

当您使用 {{link-to}> 帮助程序或 transitionTo 方法重新尝试转换时,它会在当前活动路由上触发 willTransition 操作。

语法

Ember.Route.extend ({
   actions: {
      willTransition(transition) {
         //处理转换
      }
   }
});

示例

下面给出的示例描述了通过活动路由上的 willTransition 操作阻止转换。创建一个名为 willtransition 的路由,并使用以下代码打开 router.js 文件来定义 URL 映射 −

import Ember from 'ember';
//以变量 Ember 的形式访问 Ember.js 库
import config from './config/environment';
//它提供以变量 config 的形式访问应用程序配置数据的功能

//const 声明只读变量
const Router = Ember.Router.extend ({
   location: config.locationType,
   rootURL: config.rootURL
});

Router.map(function() {
   this.route('willtransition');
});

//它指定了可供应用程序其他部分使用的 Router 变量
export default Router;

创建 application.hbs 文件并添加以下代码 −

//link-to 是用于创建链接的手柄助手
{{link-to 'Click For Transition' 'willtransition'}}
{{outlet}} //它是一个通用助手,其他页面的内容将显示在此部分内

使用以下代码打开在 app/routes/ 下创建的文件 willtransition.js

import Ember from 'ember';

export default Ember.Route.extend ({
   actions: {
      willTransition(transition) {
         
         //声明自身变量
         var self = this;
         
         //检查自身变量是否为假
         if (!this.get('allowTransition')) {
            document.write('<b><font color = "red">');
            
            //显示消息
            document.write("transition abort");
            document.write('</font><br>');
            transition.abort();  //调用中止函数

            Ember.run.later(function () {
               //将 self 变量设置为 true
               self.set('allowTransition', true);
               document.write('<b><font color = "blue">');
               
               //显示消息
               document.write("transition retry");
               document.write('</font>');
               transition.retry();  //调用重试函数
            }, 500);
         }
      }
   }
});

使用以下代码打开在 app/templates/ 下创建的 willtransition.hbs 文件 −

<h2>Hello...Welcome to Tutorialspoint!!!</h2>
{{outlet}}

输出

运行ember服务器,您将收到以下输出−

Ember.js 将过渡

当您点击链接时,它将显示数据。但是如果你点击返回链接,willTransition 动作会调用 transition.abort(),然后调用 transition.retry() 方法。< /p> Ember.js 将转换

emberjs_router.html