为什么 Angular 的 '$location.url' 在我的 Bootstrap Modal 关闭后不起作用?



问题:

有谁知道为什么在下面的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。

相关内容

  • 没有找到相关文章

最新更新