异步中止ui-router转换而不生成TransitionRejection日志

时间:2017-07-25 08:03:59

标签: angularjs angular-ui-router

我尝试在没有错误日志条目的情况下中止ui-router转换,我不能使用transition.abort(),因为我必须等待用户输入("未保存的更改。继续?" )所以我回复了一个承诺。

  $transitions.onExit({exiting: 'main.settings'}, function(transition) {      
    var deferred = $q.defer();

    // promise testing
    $timeout(function(){
      // here i need to create a Rejection Object with type = RejectType.ABORTED 
      deferred.reject(false);
    }, 500);

    return deferred.promise;
  });

如果我拒绝承诺,我会收到错误日志条目,因为我不知道如何在我的控制器中使用RejectType.ABORTED创建拒绝。如何才能访问拒绝类?

或者还有其他方法,如何在不创建错误日志条目的情况下异步中止转换?

使用Angular 1.5.1和ui-router 1.0.5。

还在https://github.com/ui-router/core/issues/35询问。

由于

2 个答案:

答案 0 :(得分:0)

在转换钩子中返回被拒绝的承诺或错误值似乎是中止转换的最自然方式。

但是,如果您不想使用错误消息来填充日志,则需要按照此处的说明提供defaultErrorHandler() - https://ui-router.github.io/ng1/docs/latest/classes/state.stateservice.html#defaulterrorhandler

如果您想要处理某些特定的转换错误,则需要执行此操作 为此提供onError挂钩,如此处所述 - https://ui-router.github.io/ng1/docs/latest/classes/transition.transition-1.html#onerror

答案 1 :(得分:0)

我通过定义自己的Schema::create('subjects', function (Blueprint $table) { $table->engine = 'InnoDB'; $table->increments('id'); $table->string('name'); $table->integer('branchId')->unsigned(); $branchName = DB::table('branch')->where('id', '=', 'branchId')->value('name'); $table->string('url')->storedAs(' "/" + "' . $branchName . '" + "/" + name '); }); 解决了这个问题。现在我可以防止在中止转换后显示错误消息。

谢谢@ Pavel Bely