angular2 使用navigate进行路由跳转,到新路由没有触发ngoninit周期函数。

跳转方法:_this代表组件实例

      _this.router.navigate(['/analysis/examdetail'],
        {
          queryParams: _this.params
        });

在新路由:

  constructor(private route: ActivatedRoute, private mrequest: MrequestService, public changeDetectorRef: ChangeDetectorRef) {
    this.route.queryParams.subscribe(params => {
      console.log(params);
      this.e_id = params.e_id;
      this.p_id = params.p_id;
      this.endtype = params.endtype;
    });
    this.isIOS = mrequest.isIOSPlatform();
    console.log(this.endtype);
    this.getExamDetail();

  }

  ngOnInit() {
  console.log(2222);
  }

页面中的跳转是点击echarts柱状图进行跳转的

    this.echartsIntance.on('click', function(params) {
      // console.log(params);
      const dataIndex = params.dataIndex;
      // console.log(_this.examId);
      _this.params['e_id'] = _this.examId[dataIndex];
      _this.params['p_id'] = _this.paperId[dataIndex];
      _this.params.cid = _this.classIdList[dataIndex];
      // console.log(_this.params);
      _this.router.navigate(['/analysis/examdetail'],
        {
          queryParams: _this.params
        });
    });

怀疑是不是echarts中的跳转angular2检测不到?有什么解决办法呢?
构造器中的代码可以执行,但是其中的数据不能渲染到页面中,控制台打印不出ngoninit中的信息。

阅读 4k
2 个回答

你可以尝试在router-outlet所在的组件捕获路由跳转事件,然后通过ChangeDetectorRef更新里面的内容
不敢说合不合适 但是我这边是凑效了

这样就ok了

constructor(private  router: Router) {
    this.router.routeReuseStrategy.shouldReuseRoute = function() {
        return false;
    };
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进