gpt4 book ai didi

ruby-on-rails - 将 angularjs 与 Turbolink 一起使用

转载 作者:行者123 更新时间:2023-12-03 01:15:39 25 4
gpt4 key购买 nike

我正在尝试在我的应用程序中使用 Turbolinks 的 Angularjs 框架。页面更改后,它不会初始化新的事件监听器。有什么办法让它发挥作用吗?提前致谢!

最佳答案

AngularJS 与 Turbolinks

Turbolinks 以及 AnguluarJS 都可以用来使 Web 应用程序响应更快,从某种意义上说,响应用户交互,网页上会发生一些事情无需重新加载和重新渲染整个页面。

它们在以下方面有所不同:

  • AngularJS 可帮助您构建丰富的客户端应用程序,您可以在其中编写大量在客户端计算机上运行的 JavaScript 代码。此代码使网站能够与用户交互。它使用 JSON API 与服务器端后端(即 Rails 应用程序)进行通信。

  • 另一方面,
  • Turbolinks 有助于使网站具有交互性,而无需您编写 JavaScript 代码。它允许您坚持在服务器端运行的 Ruby/Rails 代码,并且仍然“神奇地”使用 AJAX 来替换(从而重新呈现)页面中已更改的部分。

Turbolinks 的强大之处在于允许您使用这种强大的 AJAX 机制,而无需手动执行任何操作,只需编写 Ruby/Rails 代码,随着您的应用程序的增长,可能会出现一个阶段,您希望集成 JavaScript 框架,例如 AngularJS 。

特别是在这个中间阶段,您希望将 AngularJS 成功集成到您的应用程序中,一次一个组件,因此同时运行 Angular JS 和 Turbolinks 是非常有意义的。

如何一起使用 AngularJS 和 Turbolinks

使用回调手动引导 Angular

在 Angular 代码中,有一行定义应用程序模块,如下所示:

# app/assets/javascripts/angular-app.js.coffee
# without turbolinks
@app = angular.module 'MyApplication', ['ngResource']

此代码在页面加载时运行。但由于 Turbolinks 只是替换页面的一部分并阻止整个页面加载,因此您必须确保 Angular 应用程序已正确初始化(“引导”),即使在 Turbolinks 完成此类部分重新加载之后也是如此。因此,将上述模块声明替换为以下代码:

# app/assets/javascripts/angular-app.js.coffee
# with turbolinks
@app = angular.module 'MyApplication', ['ngResource']

$(document).on 'turbolinks:load', ->
angular.bootstrap document.body, ['MyApplication']

不自动引导

您经常在教程中看到如何通过在 HTML 代码中使用 ng-app 属性来自动引导 Angular 应用。

<!-- app/views/layouts/my_layout.html.erb -->
<!-- without turbolinks -->
<html ng-app="YourApplication">
...

但是将此机制与上面所示的手动引导一起使用会导致应用程序引导两次,因此会阻止应用程序。

因此,只需删除此 ng-app 属性即可:

<!-- app/views/layouts/my_layout.html.erb -->
<!-- with turbolinks -->
<html>
...

进一步阅读

关于ruby-on-rails - 将 angularjs 与 Turbolink 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com