【问题标题】:Sidenav throwing exception: Error during evaluation of "onShown"Sidenav 抛出异常:评估“onShown”时出错
【发布时间】:2016-07-26 23:00:47
【问题描述】:

我用这个sidenav

<div layout="column" style="height:60px;">
<md-sidenav-container layout="row" flex>
<md-content flex layout-padding>
  <div layout="column" layout-fill layout-align="top right" style="width: 50px; position: absolute;
top: -8px;
right: 55px;
font-size: 18px;">
    <button md-raised-button (click)="open('right')" [hidden]="rightOpened" class="md-primary">
      Filtros
    </button>
  </div>
  <div flex></div>
</md-content>
<md-sidenav name="right" align="right" layout="column" (onShown)="input.focus()">
  <md-toolbar class="md-theme-light">
    <h1 class="md-toolbar-tools">Sidenav Right</h1>
  </md-toolbar>

在此之后,我调用了不同的组件。我刚刚学会了如何使用开发者工具来查看错误和警告,所以我还是个新手,但我不记得它是很久以前扔的,在我实施很多更改之前。

问题是我不太了解错误:

EXCEPTION: Error during evaluation of "onShown"

...

ORIGINAL EXCEPTION: TypeError: Cannot read property 'focus' of undefined

...

TypeError: Cannot read property 'focus' of undefined
    at AbstractChangeDetector.ChangeDetector_SidenavBasicUsage_0.handleEventInternal (viewFactory_SidenavBasicUsage:361:24)
    at AbstractChangeDetector.handleEvent

因为我没有看到任何与我的代码相关的地方。我已经完成了,可以说,我相信来自materializecss,现在我想知道是否继续忽略错误,因为它工作得很好,或者做点什么(我宁愿这样做,但我不知道在哪里开始戳它,以便我修复它)。

【问题讨论】:

  • 你在哪里声明input变量?
  • ...或者input应该指的是什么?
  • 我没有,正如下面的答案中所解释的那样,这是一个示例,因此它希望我正确定义任何必要的内容。我完全无法理解,我无法完全看到它。再次感谢您的帮助,这可能看起来微不足道,但我花了太多时间查找这些东西
  • 我明白了@Pace,这就是为什么我尽可能多地感谢所提供的帮助:(。这不仅仅是我抬头看了一下,然后在这里问的问题。Maaany 事情我要么在这里得到答案,要么没有得到解决/没有得到解决方案。例如,我正在尝试尽可能多地解决问题本身。我觉得我现在做得很好,因为我经常得到一个答案,与我很少得到答案的时代相比

标签: javascript html angular


【解决方案1】:

正如 cmets 所说,您的 HTML 有一个 sn-p:

<md-sidenav name="right" align="right" layout="column" (onShown)="input.focus()">

问题在于(onShown)="input.focus()"。此代码可能来自某种示例。通常,这种聚焦显示的目的是在 sidenav 变得可见时聚焦在 sidenav 内部的元素上。这样做通常是为了便于键盘用户使用和出于可访问性的原因(视力受损的人可能不知道刚刚出现的 sidenav)。

但是,问题可能在于您没有任何名为input 的变量。如果您打算拥有一个名为 input 的变量并希望它能够聚焦,那么可以使用几种不同的方法,并且我们没有足够的代码来告诉您要做什么。一个常见的例子可能看起来像......

<md-sidenav name="right" align="right" layout="column" (onShown)="input.focus()">
  <input #input type="text" class="search"/>
</md-sidenav>

请注意,#input 声明了一个名为 input 的模板引用变量,该变量可以在模板的其他地方引用(例如 input.focus())。

【讨论】:

  • 你完全正确,我没有任何这样的变量。事实上,我相信我不需要它,当我删除 (onShown)="input.focus()" 时,错误消失了,其余代码继续正常工作,所以,这是一个不知道是什么的问题代码可以。感谢您抽出宝贵的时间,它确实对我有很大帮助
猜你喜欢
  • 2012-08-22
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2013-05-24
  • 2020-04-30
  • 1970-01-01
  • 2020-01-18
相关资源
最近更新 更多