相关疑难解决方法(0)

为什么setTimeout(fn,0)有时会有用?

我最近遇到了一个相当讨厌的错误,其中代码是<select>通过JavaScript动态加载的.这种动态加载<select>具有预先选择的值.在IE6中,我们已经有了修复所选内容的代码<option>,因为有时它<select>selectedIndex值与所选<option>index属性不同步,如下所示:

field.selectedIndex = element.index;
Run Code Online (Sandbox Code Playgroud)

但是,此代码无效.即使selectedIndex正确设置了字段,最终也会选择错误的索引.但是,如果我alert()在正确的时间插入声明,则会选择正确的选项.考虑到这可能是某种时间问题,我尝试了一些随机的东西,我之前在代码中看到过:

var wrapFn = (function() {
    var myField = field;
    var myElement = element;

    return function() {
        myField.selectedIndex = myElement.index;
    }
})();
setTimeout(wrapFn, 0);
Run Code Online (Sandbox Code Playgroud)

这有效!

我已经找到了解决问题的方法,但是我很不安,因为我不知道为什么这会解决我的问题.有人有官方解释吗?使用"稍后"调用我的功能可以避免哪些浏览器问题setTimeout()

javascript dom event-loop

833
推荐指数
11
解决办法
23万
查看次数

角度窗口调整大小事件

我想基于窗口重新调整大小事件(加载和动态)执行一些任务.

目前我有我的DOM如下:

<div id="Harbour">
    <div id="Port" (window:resize)="onResize($event)" >
        <router-outlet></router-outlet>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

事件正确触发

export class AppComponent {
   onResize(event) {
        console.log(event);
    }
}
Run Code Online (Sandbox Code Playgroud)

如何从此事件对象中检索宽度和高度?

谢谢.

javascript angular

199
推荐指数
10
解决办法
20万
查看次数

如何创建下拉列表并绑定来自服务器的数据

我对 Angular 很陌生。我有一些关于 Angular 的工作。

我需要Json通过调用 Rest Api 为来自服务器的数据绑定嵌套下拉列表。

数据具有一个属性级别,指定组层次结构中的级别。Parent 将具有 Immediate Child=1Grandchild=2依此类推。Child并且Grandchild有 Group 字段,它显示在哪个父菜单中,子菜单将在那里。

我试过它来开发,但我发现所有bootstrap带有静态数据的示例html文件和单独的CSS文件,这对我来说很复杂。

我想动态地使用TypeScript. 我怎样才能开始研究它。

html typescript angular

15
推荐指数
1
解决办法
2313
查看次数

@HostListener在我正在侦听外部点击时导致更改检测触发次数太多

我有下一个根组件模板,它绘制了9个tile:

<ul>
  <li *ngFor="let x of [0,1,2,3,4,5,6,7,8]">
    <tile></tile>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

和下一个tile组件,我在其中添加了HostListener以进行文档点击:

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

@Component({
  selector: 'tile',
  template: '<p>tile works!</p>'
})
export class TileComponent implements AfterViewChecked {

  ngAfterViewChecked(): void {
    console.log('checked');
  }

  @HostListener('document:click', ['$event'])
  onOutsideClick(event: any): void {
      // do nothing ...
  }

}
Run Code Online (Sandbox Code Playgroud)

Plunker:http://plnkr.co/edit/7wvon25LhXkHQiMcwh48?p =preview

当我运行它时,我看到每次点击更改检测被称为9 ^ 2次: 在此输入图像描述

我不明白为什么.

有人可以向我解释为什么在这种情况下变化检测触发n ^ 2次?

angular2-changedetection angular

7
推荐指数
1
解决办法
1519
查看次数

如何在Angular 7中检测元素外部的单击?

div将在页面作为东面板上被动态地示出的,当open panel按钮被点击。bool showEastPanel变量是用于打开和关闭东部面板的变量。我试图用来(clickoutside)关闭面板(设置showEastPanel为false),但是打开的面板首先在Angular挂钩上运行,并且面板设置为true,然后设置为false,并且面板不显示。有什么办法使“ clickoutside”范围不包括按钮?

<div [ngClass]="{'d-none': !showEastPanel, 'east-panel-container': showEastPanel}" (clickOutside)="ClosePanel()">
<div id="east-panel">
  <ng-template #eastPanel></ng-template>
</div>
Run Code Online (Sandbox Code Playgroud)

<button (click)="ShowPanel()">Open Panel</button>
Run Code Online (Sandbox Code Playgroud)

html angular

5
推荐指数
6
解决办法
4910
查看次数

单击外部角度分量

我知道围绕这个问题有无数的问题,我尝试了所有解决方案,但没有一个适合我的需要。尝试过指令,直接在我的组件中尝试过,但它一次都不起作用。

所以我的情况是这样的;我有一个表格视图,在每个表格视图的末尾,您可以通过单击图标打开一个小下拉列表。弹出的下拉菜单是一个小组件。所以在我的父组件中它看起来像这样;

<tbody>
    <tr *ngFor="let rows of subscriptionTable.data; let i = index;">
        <td *ngFor="let cell of subscriptionTable.data[i].data"> 
            <!-- Table actions -->
            <div *ngIf="cell.actions && cell.actions.length > 0">
                <app-dropdown
                    [actions]         = cell.actions
                    (onActionClicked) = "handleSubscriptionAction($event, i)"
                >
                </app-dropdown>
            </div>
        </td>
    </tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)

所以我正在渲染多个子应用程序下拉组件,如下所示;

<div class="fs-action">
  <div class="fs-action__dots" (click)="openActionSheet($event)">
    <span class="fs-action__dot"></span>
    <span class="fs-action__dot"></span>
    <span class="fs-action__dot"></span>
  </div>

  <ul class="fs-action__list">
    <li 
      class="fs-action__item"
      *ngFor="let action of actions; let i = index;" 
      (click)="actionClicked( $event, i )" 
      [ngClass]="{'fs-action__item--danger': action.type === 'destructive' }"
    >
        {{ action.label }}
    </li> …
Run Code Online (Sandbox Code Playgroud)

javascript angular-directive angular

5
推荐指数
1
解决办法
9498
查看次数

Angular 2.删除@Hostlistener()

我如何像在本机JS中使用的removeEventListener一样,在Angular 2中删除@Hostlistener()

示例: 页面中有很多dropDown组件。当dropDown打开时,我想在document click事件上添加处理程序,并在dropDown关闭时删除处理程序。

原生JS:

function handler(){
  //do something
}
document.addEventListener('click', handler); // add handler
document.removeEventListener('click', handler); // remove handler
Run Code Online (Sandbox Code Playgroud)

角度2:

  @HostListener('document: click') onDocumentClick () {
    // do something
  }

  // How can I remove handler?
Run Code Online (Sandbox Code Playgroud)

javascript typescript angular

4
推荐指数
2
解决办法
4777
查看次数