我最近遇到了一个相当讨厌的错误,其中代码是<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()?
我想基于窗口重新调整大小事件(加载和动态)执行一些任务.
目前我有我的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)
如何从此事件对象中检索宽度和高度?
谢谢.
我对 Angular 很陌生。我有一些关于 Angular 的工作。
我需要Json通过调用 Rest Api 为来自服务器的数据绑定嵌套下拉列表。
数据具有一个属性级别,指定组层次结构中的级别。Parent 将具有 Immediate Child=1,Grandchild=2依此类推。Child并且Grandchild有 Group 字段,它显示在哪个父菜单中,子菜单将在那里。
我试过它来开发,但我发现所有bootstrap带有静态数据的示例html文件和单独的CSS文件,这对我来说很复杂。
我想动态地使用TypeScript. 我怎样才能开始研究它。
我有下一个根组件模板,它绘制了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
我不明白为什么.
有人可以向我解释为什么在这种情况下变化检测触发n ^ 2次?
这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) 我知道围绕这个问题有无数的问题,我尝试了所有解决方案,但没有一个适合我的需要。尝试过指令,直接在我的组件中尝试过,但它一次都不起作用。
所以我的情况是这样的;我有一个表格视图,在每个表格视图的末尾,您可以通过单击图标打开一个小下拉列表。弹出的下拉菜单是一个小组件。所以在我的父组件中它看起来像这样;
<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) 我如何像在本机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)