任何人都知道为什么在我的cb.register
函数中,我的模态窗口关闭,但$location.url('/dashboard')
无法正常运行?
我没有收到任何控制台错误,并且页面没有重定向。但是,在模态窗口关闭后,console.log('TRANSITION DONE')
仍会在下面的代码中打印出来,所以我知道事件正在被识别:
app.controller('userController', ['$scope', 'userFactory', '$location', function($scope, userFactory, $location) {
var cb = {
register: function(createdUser) {
// Closes Modal window:
$('#myModal').modal('hide');
// Runs after close with completed transition effects:
$('#myModal').on('hidden.bs.modal', function (e) {
console.log('TRANSITION DONE');
$location.url('/dashboard');
})
},
};
}]);
$location
服务嵌套在.on()
函数内时行为不正常? angular-ui
吗? (在研究这个问题的解决方案之前我并不熟悉,而是首先使用bootstrap3并包含JS文件等来构建所有视图来启动我的项目。)我已经尝试将$location
参数传递给.on()
的回调函数以及e
,但这没有做出真正的改变,而且该函数仍然应该有访问更大范围内的$location
。
控制台日志记录$location
或$location.url
正常运行,因此我知道这些方法可以在范围内访问。
将$location
功能移到on()
功能之外会加载仪表板页面,但淡出模式关闭不会完成。浅灰色透明BG覆盖在我的仪表板页面上,这就是我选择根据文档使用hidden.bs.modal
事件的原因:http://getbootstrap.com/javascript/#modals
// Closes window:
$('#myModal').modal('hide');
// Redirects to page but fade-out on Modal not completed:
$location.url('/dashboard');
$location.url('/dashboard')
运行,加载信息中心页面感谢任何有帮助的角色/自助忍者!
答案 0 :(得分:2)
为什么嵌套在我的.on()函数中时,$ location服务的行为不正常?
您在应用程序中直接使用Bootstrap模式 - 这没关系。 但是,这需要你用jQuery操作模态。不建议在AngularJS应用程序中使用jQuery,因为AngularJS有自己的DOM操作方法,因此不应该通过jQuery手动操作DOM。
要回答你的问题,因为你正在使用jQuery来直接操作DOM,所以很可能AngularJS的摘要周期没有在模态结束时获得。你可以告诉AngularJS通过$scope.$apply()
激活一个摘要周期来解决这个问题。但是,根据最佳AngularJS原则,这很容易弄脏您的代码并且没有意义。
我应该使用angular-ui吗? (在研究这个问题的解决方案之前我并不熟悉,而是首先使用bootstrap3并包含JS文件等来构建所有视图来启动我的项目。)
是。我高度建议使用angular-ui。根据文件:
此存储库包含一组基于Bootstrap标记和CSS的本机AngularJS指令。因此,不需要依赖jQuery或Bootstrap的JavaScript。
正如您所看到的,所有Bootstrap功能都已包含在AngularJS指令中,可以轻松地将其删除到您的应用程序中,而无需担心jQuery。