问题:
有谁知道为什么在下面的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
参数与e
一起传递到.on()
的回调函数中,但这并没有做出真正的改变,该函数仍然应该可以访问更大范围内的$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')
运行,加载仪表板页面
感谢任何可以提供帮助的棱角/引导忍者!
为什么 $location 服务嵌套在我的 .on() 函数中时无法正常运行?
你直接在你的应用程序中使用Bootstrap模式 - 这没关系。但是,这需要你用jQuery操作模态。不建议在 AngularJS 应用程序中使用 jQuery,因为 AngularJS 有自己的 DOM 操作方法,因此您不应该通过 jQuery 手动操作 DOM。
为了回答你的问题,由于你使用jQuery直接操作DOM,所以AngularJS的摘要周期很可能没有在模态关闭时开始。您可以通过告诉 AngularJS 通过$scope.$apply()
激活摘要周期来解决此问题。但是,这很容易弄脏您的代码,并且根据最佳AngularJS原则没有意义。
我应该改用角度 ui 吗?(在研究这个问题的解决方案之前,我并不熟悉它,而是通过使用 bootstrap3 首先构建所有视图并包括 JS 文件等来开始我的项目)。
是的。我强烈建议使用角度 UI。根据文档:
这个仓库包含一组基于Bootstrap的标记和CSS的原生AngularJS指令。因此,不需要依赖jQuery或Bootstrap的JavaScript。
如您所见,所有 Bootstrap 功能都已包含在 AngularJS 指令中,这些指令可以轻松地放入您的应用程序中,而无需担心 jQuery。