2

我正在将我的 rails 4.2.0 应用程序升级到 5.1.2,这很好。我曾使用 Angular 1.x 选择性地增强我的 rails 应用程序页面。我的 Rails 视图在 HAML 中。这是在 4.2.0 中加载良好但在 5.1.2 中加载的页面片段:

.well{"ng-app" => "billing", "ng-controller" => "BillableCtrl"}
  = simple_form_for @billable do |f|
    .row
      .col-md-4

这会在此视图中加载角度精细。但是,当我尝试在 Rails 5.1.2 中加载它时,我在我的 javascript 控制台中得到以下堆栈跟踪。

未捕获的语法错误:意外的令牌和 angular.self-26d045c60a96c782aa8ef9f5709b1b4fd1ec8578bc37ec2c6c2b9c4370f4bac0.js?body=1:64 未捕获的错误:[$injector:modulerr] 无法实例化模块计费,原因是:错误:[$injector:nomod] 模块计费可用的!您要么拼错了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。

我在 rails 5.1.2 升级中使用 ngannotate-rails 版本 1.2.2。rails 4.2.0 版本中使用的 ngannotate-rails 版本为 0.15.4。

有没有其他人遇到过这个问题?有哪些可供调查的选项?

4

1 回答 1

0

结果证明不是角度问题,而是 Rails 到 Javascript 消息传递问题。看看我的一个 javascript 函数中的以下行代码:

$scope.billable_item = #{@billable.to_json};

根据我的经验,直到 Rails 4.2.0,这是将 Rails 数据传递到 javascript 的标准方法。但是,由于某种我还不明白的原因,它被打破了。这导致 Angular 抛出非常混乱的消息。一段时间以来,我一直在使用“Gon”gem 将数据从 Rails 传递到 Javascript,然后我切换到运行良好的那个。我现在将把我的整个 Rails 转换为 Javascript 与 Gon gem 的通信。

于 2017-08-16T12:32:22.527 回答