angular - ngif 导致页面重新加载 - Angular 2

标签 angular

我尝试在收到搜索结果时显示组件,导致事件发射器关闭,导致执行 onResultsRecieved()

但是页面只是重新加载。所以我调试了它,当代码进入 onResultsRecieved() 时,当它运行 this.results.scroll() 时,它会导致一个异常,显示“TypeError: Cannot read属性“滚动”为未定义”,然后页面就会重新加载。

scroll() 是结果 View 子级上的方法。

为什么结果未定义?为什么异常永远不会显示在控制台中,而是重新加载页面?

涉及的所有代码:

find-page.component.html

<div id="find-page">
   <find-form (onResultsRecieved)="onResultsRecieved($event)"></find-form>
</div>
<results-div #results *ngIf="showResults"></results-div>

find-page.component.ts

import { Component, ViewChild } from '@angular/core';
import { NavbarComponent } from '../shared/navbar.component';
import { FindFormComponent } from '../find-page/find-form.component';
import { ResultsComponent } from '../find-page/results.component';

@Component({
   selector: 'find-page',
   templateUrl: 'app/find-page/find-page.component.html',
   styleUrls: ['app/find-page/find-page.component.css' ],
   directives: [ FindFormComponent, ResultsComponent ]
})
export class FindPageComponent {
   showResults = false;
    @ViewChild('results') results;

     onResultsRecieved(recieved: boolean) {
        if ( recieved ) {
           this.showResults = true;
           this.results.scroll();
        }else {
           this.showResults = false;
        }
  }
}

结果.component.ts:

import { Component, AfterViewInit } from '@angular/core';

@Component({
   selector: 'results-div',
   templateUrl: 'app/find-page/results.component.html',
   styleUrls: ['app/find-page/results.component.css' ]
})
export class ResultsComponent implements AfterViewInit {

   ngAfterViewInit() {
ScrollToAnchor.goToTargetBottom("#results-page");
   }

   scroll() {
      ScrollToAnchor.goToTargetBottom("#results-page");
   }
}

results.component.html:

<div id="results-page"></div>

相关CSS:

#results-page {
  overflow-y: auto;
  overflow-x: hidden;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding-top: 50px; }

最佳答案

看来您正在使用表单,但是,我没有在任何地方看到附加的实际代码,因此这只是一个有根据的猜测。我遇到了一个非常相似的问题(这就是我偶然发现这个问题的原因),并且很容易就解决了。

当您提交表单时,即使没有操作属性,它也会尝试将您带到 action 属性定义的任何位置(在这种情况下,表单只会重新加载当前页面)。为了避免这种情况,请将 onSubmit="return false;" 添加到您的表单标记,这将阻止表单在提交后尝试更改页面。

希望这有帮助。

关于angular - ngif 导致页面重新加载 - Angular 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282116/

相关文章:

angular - 更新 EntityAdapter 内的数组

google-analytics - 与 angular 1 不同,angular2 路由可以被 Google 机器人索引吗?

带有 SVG 圆的 Angular2 *ngFor

angular - 将 Angular 4 与 GoJ 集成

javascript - 在页面加载时执行函数,ANGULAR 2

javascript - 如果隐藏,输入类型文件不起作用

angular - 你如何删除 typescript 中的错误错误(错误: TS2339)?

angular - 如何删除 Angular Material Design 菜单框滚动条

angular - 将 WebStorm TSLint 错误行更改为警告行

angular - 升级 JQuery 3.2 版输入文件,它抛出 lint 错误