【问题标题】:Ruby on Rails script not being loadedRuby on Rails 脚本未加载
【发布时间】:2017-08-04 16:47:35
【问题描述】:

在我的 ruby​​ on rails 应用程序中,我通过 ajax 调用生成视图。

我正在使用以下代码。

$("#a_div_id").html("<%= escape_javascript(render 'index')%>");

我要渲染的视图是 _index.html.erb:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>


<div ng-app="myApp" ng-controller="myCtrl">

    First Name: <input type="text" ng-model="firstName"><br>
    Last Name: <input type="text" ng-model="lastName"><br>
    <br>
    Full Name: {{firstName + " " + lastName}}
</div>

<script>

    alert('first');

    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {

        alert('second');

        $scope.firstName = "John";
        $scope.lastName = "Doe";
    });

    alert('third');

</script>

当我渲染视图时,我只收到第一条和第三条消息。但是,当我将这段代码添加到 dashboard.html.erb 中而不是通过 ajax 代码呈现它时,它可以完美运行。

在第一种情况下,我收到以下错误。

angular.min.js:6 Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.4.8/$injector/modulerr?p0=myApp&p1=Error%3A%2…ogleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.4.8%2Fangular.min.js%3A20%3A274)
    at angular.min.js:6
    at angular.min.js:38
    at n (angular.min.js:7)
    at g (angular.min.js:37)
    at eb (angular.min.js:41)
    at c (angular.min.js:19)
    at yc (angular.min.js:20)
    at Zd (angular.min.js:19)
    at HTMLDocument.<anonymous> (angular.min.js:294)
    at fire (jquery.self-bd7ddd3….js?body=1:3233)

我束手无策,我无法决定我错过了什么,

任何建议,

谢谢。 ​

【问题讨论】:

    标签: ruby-on-rails angularjs ruby ajax asset-pipeline


    【解决方案1】:

    你可以尝试不使用escape_javascript。 还要像这样放一个debugger,这样会在chrome执行js的时候放一个断点。

    debugger;
    $("#a_div_id").html("<%= render 'index' %>");
    

    这将帮助您了解 jquery 试图添加为 HTML 的确切内容。

    如果这不起作用,

    可能你应该把script标签中的js放到某个方法中,然后在为dom添加索引后调用该方法。

    $("#a_div_id").html("<%= render 'index' %>");
    myMethodToRenderAngular();
    

    【讨论】:

    • 我尝试省略 escape_javascript 但没有用。我也尝试过在渲染索引后加载 angularJS,但效果不佳。
    • 您在浏览器控制台中看到错误吗?将调试器放在$scope.firstName = "John"; 之上,然后一次运行一个步骤
    • 是的。未捕获的错误:[$injector:modulerr] errors.angularjs.org/1.4.8/$injector/…...ogleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.4.8%2Fangular.min.js%3A20%3A274) 在 angular.js:38 在 angular.js:4458 在n (angular.js:340) 在 g (angular.js:4419) 在 eb (angular.js:4344) 在 c (angular.js:1676) 在 yc (angular.js:1697) 在 Zd (angular.js :1591) 在 HTMLDocument. (angular.js:29013) 在火灾 (jquery.self-bd7ddd3….js?body=1:3233)
    • 很难理解评论中的错误。你能用错误详情更新你的问题吗
    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多