我发现了一个涉及bootstrapjs模态和angular2的奇怪问题.我有一个绑定到bootstrap模式的html的组件:
// ... lots of imports here
@Component({
selector: 'scrum-sessions-modal',
bindings: [ScrumSessionService, ScrumSessionRepository, ScrumModuleDataContext, ElementRef]
})
@View({
templateUrl: 'templates/modals/scrumSessions.modal.html',
styleUrls: ['']
})
export class ScrumSessionsModalComponent {
private _elementRef: ElementRef;
public sessions: ScrumSession[];
constructor(scrumSessionsProxy: ScrumSessionsProxy, scrumSessionService: ScrumSessionService, elementRef: ElementRef) {
this._proxy = scrumSessionsProxy;
this._scrumSessionService = scrumSessionService;
this._elementRef = elementRef;
// This is the bootstrap on shown event where i call the initialize method
jQuery(this._elementRef.nativeElement).on("shown.bs.modal", () => {
this.initialize();
});
jQuery("#scrumSessionsModal").on("hidden.bs.modal", () => {
this.cleanup();
});
}
public initialize() {
// Start our hub proxy to the scrumsessionshub
this._proxy.start().then(() => {
// Fetch all active sessions;
this._scrumSessionService.fetchActiveSessions().then((sessions: ScrumSession[]) => {
// This console.log is being shown, however the sessions list is never populated in the view even though there are active sessions!
console.log("loaded");
this.sessions = sessions;
});
});
}
// Free up memory and stop any event listeners/hubs
private cleanup() {
this.sessions = [];
this._proxy.stop();
}
}
在这个模态中,我在构造函数中有一个事件监听器,用于检查何时显示模态.当它这样做时,它调用初始化函数,该函数将加载将在模态中显示的初始数据.
模态的html如下所示:
Actieve sessies
Id
Maker
Start datum
Aantal deelnemers
{{ session.id }}
test
test
test
我遇到的问题是由fetchactivesessions函数填充的sessions变量不会在视图中更新.我在调用完成方法上放了一个调试器,并且调用了一个scrumsession对象的结果.
但是,当我删除on("shown.bs.modal")事件监听器并简单地将调用初始化()放在5秒的setTimeout函数内,然后打开模态时会正确填充会话列表.
它只发生在我将initialize调用放在bootstrap显示事件的回调中.当调用在jquery回调中时,它就像停止检查更改一样.有谁知道这笔交易是什么?我可以只在构造函数中调用初始化,但我宁愿调用bootstrap中显示的事件.
我已经发布了最新版本的应用程序,用于调试:http://gbscrumboard.azurewebsites.net/
1> ObjectiveTC..:
解决方案:使用Angular4/Bootstrap4观察Bootstrap事件.
摘要:拦截引导事件,并在其位置触发自定义事件.自定义事件将在角度组件内观察到.
index.html的:
...
在您的组件/服务中:
//dynamically execute the event relays
private registerEvent(event){
var script = document.createElement('script');
script.innerHTML = "eventRelay('"+event+"');"
document.body.appendChild(script);
}
在Component的构造函数或ngOnInit()中,您现在可以注册并观察引导事件.例如,Bootstrap Modal'隐藏'事件.
constructor(){
registerEvent('hidden.bs.modal');
Observable.fromEvent(document, 'hidden.bs.modal')
.subscribe(($event) => {
console.log('my component observed hidden.bs.modal');
//...insert your code here...
});
}
注意:'eventRelay'函数必须在index.html内,以便DOM加载它.否则,当您从'registerEvent'中发出对'eventRelay'的调用时,将无法识别它.
结论:这是一个适用于vanilla Angular4/Bootstrap4的中间件解决方案.我不知道为什么bootstrap事件在angular中是不可见的,我还没有找到任何其他解决方案.
注1:每次事件只调用一次registerEvent.这意味着在整个应用程序中"一次",因此请考虑将所有registerEvent调用放在app.component.ts中.多次调用registerEvent将导致重复事件被发送到角度.
注意2:你可以使用一个替代的bootstrap框架,名为ngx-bootstrap(https://valor-software.com/ngx-bootstrap/#/),它可能会使引导事件可见,但我还没有测试过.
高级解决方案:创建一个Angular Service来管理通过'registerEvent'注册的事件,因此它只为每个事件调用一次'registerEvent'.这样,在组件中,您可以调用'registerEvent',然后立即为该事件创建Observable,而不必担心在其他组件中对'registerEvent'的重复调用.
这应该是Angular 4的答案(肯定是4.2.4).
推荐阅读
-
如何解决《为什么SQL在ifexists结构的true部分中计算语句,即使`ifexists`返回false?》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《如何用按钮更改HTML范围滑块值?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《P/Invoke-封送委托作为函数指针+void*》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《用手机控制的网站?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《通用方法处理IEnumerable与泛型类型不同》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《理解JavaScript中的类关键字》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《在数据库中的Yii2会话存储,行太多了?性能?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《这个对象能够告诉它有多少属性不是null/whitespace/empty有什么问题?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《在javascript中将字节数组转换为十六进制字符串转换》经验,为你挑选了3个好方法。 ...
[详细]
-
如何解决《添加FXML中定义的元素以循环列出》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《使用preg_split分割和弦和单词》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《如何在点图表中清除绘制的值?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Rails:validates_length_of》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《如何在Typescript接口文件中表示返回类型?》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《从@EmbeddedId类中提取超类时,实体没有持久的id属性》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《使用Volley请求发送身份验证信息》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《在javaage计算中返回错误的值》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《在API级别19以下的Android中选择文件或图像时,如何限制Google驱动器选项不显示?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《访问包含在匿名类型或Object类中的字段》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《无法让pyspark作业在hadoop群集的所有节点上运行》经验,为你挑选了1个好方法。 ...
[详细]
吐了个 "CAO" !
Tags | 热门标签
RankList | 热门文章
-
1如何在vi编辑器中搜索带空格和特殊字符的字符串
-
2如何获取当前位置和拨出电话摘机时间(确切的呼叫选择时间)?
-
3Python字典未正确更新
-
4通过RESTful API部署Tensorflow模型的示例
-
5如何在首次启动时显示离子中的应用指令
-
6Angular 2,Visual Studio 2015更新1,类型脚本配置
-
7如何在Google自定义搜索中指定图像类型
-
8Postgres创建/恢复在亚马逊ec2上花费了大量时间
-
9带有多个跨度的文本溢出省略号
-
10如何在动态生成的表行jquery中添加和操作id
-
11如何检测无法在android中连接wifi?
-
12添加按钮到以编程方式创建的UIView
-
13如何从主目录访问产品风味类?
-
14Android数据绑定NoSuchMethodError
-
15Spring Boot - 字体很棒的OTS解析错误:无法转换
-
16为什么YYYY-MM-DD!= YYYY/MM/DD
-
17使用whatsapp分享链接
-
18如何减少if语句的长列表?
-
19使用斯坦福NLP(StanfordNERTagger和StanfordPOSTagger)为西班牙语设置NLTK
-
20由于LayoutManager为NULL,RecycleView在Fragment中崩溃
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有