javascript - 即使未调用线路,Angular2 路由器也会执行

标签 javascript angular typescript

我这里有这个小代码:

if (this._error.code == 0) {
    localStorage.setItem('pinVouchers', JSON.stringify(this._filters.pin));
    $('.loading-wrapper').addClass('hidden');
    this._router.navigate(['/dashboard/voucher/list']);
}
else {
    this._error.getErrorMessage(this._error.code);
    $('.loading-wrapper').addClass('hidden');
    alert(this._error.message);
}

在浏览器上调试时,如果 error != 0 显然会执行 else 语句内的部分代码。但是,触发警报后,它会导航到 if 语句“this._router.navigate(['/dashboard/voucher/list']);”中列出的页面。

我已经调试了整个 ts 文件,但我找不到为什么当 if 语句不成立时会触发该行代码。

请帮忙,谢谢!

编辑

这是完整的代码:

import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES, Router } from '@angular/router';
import { CORE_DIRECTIVES, ControlGroup, FORM_DIRECTIVES, Control, FormBuilder, Validators } from '@angular/common';
import { Services } from '../../../services/services';
import { Filters } from '../../../model/Filters';
import { Error } from '../../../model/Error';

@Component({
  selector: 'voucher',
  templateUrl: 'www/templates/voucher-template.html',
  directives: [ CORE_DIRECTIVES, FORM_DIRECTIVES, ROUTER_DIRECTIVES ],
  styleUrls: ['www/css/voucher.css'],
  providers: [Services]
})
export class voucher {

  _PinVouchers: ControlGroup;
  _filters: Filters;
  _error: Error;

  constructor(private services: Services, fb: FormBuilder, public _router: Router) {
    this._error = new Error();
    this._filters = new Filters();
    fb = new FormBuilder();
    this._PinVouchers = fb.group({
            'pin': new Control(this._filters.pin)
    });
   }

   ngOnInit() {
      $('.menu.active').removeClass("active");
      $('#vouchersMenu').addClass("active");
      $('.submenu.active').removeClass("active");
      localStorage.removeItem("pinVouchers");

      $(document).ready(() => {
        $('#inputPin').keypress(function(key) {
          if((key.charCode < 48 || key.charCode > 57) && (key.charCode < 97 || key.charCode > 122) && (key.charCode < 65 || key.charCode > 90) && (key.charCode != 45)) return false;
        });
      });
   }

  savePin(filters: Filters){
    $('.loading-wrapper').removeClass('hidden');

    this.services.getVisitsByPin(this._filters);
    this._error.code = JSON.parse(sessionStorage.getItem('error'));

    if (this._error.code == 0) {
      localStorage.setItem('pinVouchers', JSON.stringify(this._filters.pin));
      $('.loading-wrapper').addClass('hidden');
      this._router.navigate(['/dashboard/voucher/list']);
    }
    else {
      this._error.getErrorMessage(this._error.code);
      $('.loading-wrapper').addClass('hidden');
      alert(this._error.message);
    }
  }
}

最佳答案

我刚刚看到错误,html 模板中的 anchor 标记内也调用了路由器。

关于javascript - 即使未调用线路,Angular2 路由器也会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209926/

相关文章:

javascript - 带有 .js 扩展名的 Webpack/ts-loader 导入无法解析

javascript - before- 和 afterEach 泄漏到其他测试

reactjs - react 导航 5.x : TS2345: Argument of type ' ... ' is not assignable to parameter of type '... '

javascript - 如何从填充有 JSON 数据的下拉列表中获取选择的详细信息?

javascript - 错误 : Template parse errors: Can't bind to 'options' since it isn't a known property of 'chart'

angular - 组件渲染后如何从指令中调用函数?

html - 迭代对象并将其显示在表 Angular 6 中

javascript - 是否有针对嵌套在 mat-tab 内的组件的生命周期 Hook ?

javascript - jQuery中如何获取=号后的url值

javascript - PHP 在 ajax 调用中显示脚本的响应