1

Я использую Play Framework (2.5.9). На моем шаблоне scala html я вытягиваю Angular через WebJars. Затем я укажу модуль и контроллер, который я хочу использовать для своей страницы. Однако, когда я пытаюсь загрузить страницу, соответствующие переменные, которые должны быть установлены на «привет» через AbstractACtrl, не устанавливаются. Кроме того, в консоли браузера появляется следующая ошибка:AngularJs, используемый с Play не может найти или создать экземпляр модуля

Error: [$injector:modulerr] Failed to instantiate module abstractA due to: 
[$injector:nomod] Module 'abstractA' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument. 

Я не понимаю, почему модуль «abstractA» недоступен. Я определяю его прямо на странице view.scala.html ... Я очень уверен, что angular.js втягивается, потому что в Chrome источники показывают webjars/angular.js/1.5.9/angular.js , Все console.log и console.error в моем коде ниже - это просто сообщения, которые я выводил на консоль для отладки. На самом деле никто не печатает на консоли прямо сейчас, указывая, что выполнение никогда не доходит до них.

Что я пробовал:

1) Нагрузка в angular.js непосредственно (без WebJars).

2) Потяните в угловое route.js, angular-resource.js и/или angular-animate.js с/без WebJars.

3) «data-ng-app» - сделать его «ng-app» или «x-ng-app».

4) Пропустите в $ объеме к контроллеру и ссылки все поля через «$ рамки.» ... вместо того, чтобы «это.» ...

5) Сделать «переменная Abstracta» в начале мой JavaScript «var ab».

6) Поместите сценарий, который тянется в угловой части «голова» вместо части тела.

7) Удалите "this.originalAs = @aDocs;" линии от контроллера.

8) Поместите весь javascript в «головную» часть страницы.

Ниже мой текущий код. Пожалуйста, дайте мне знать, почему модуль «abstractA» недоступен.

build.sbt:

libraryDependencies ++= Seq(
    ... 
    "org.webjars"    % "angularjs"    % "1.5.9", 
    "org.webjars"    % "angular-ui-bootstrap"  % "2.2.0", 
    "org.webjars"    % "bootstrap"    % "3.3.7-1", 
    "org.webjars"    %% "webjars-play"   % "2.5.0" 
) 

view.scala.html: (! Какая досадная ошибка)

@(aDocs: List[String], 
    webJarAssets: controllers.WebJarAssets) 

<!DOCTYPE html> 

<meta charset='utf-8'/> 

<html lang='en'> 

<head> 
    <link rel='stylesheet' href='@routes.WebJarAssets.at(webJarAssets.locate("css/bootstrap.min.css"))' /> 
    <link rel='stylesheet' type='text/css' href='@routes.Assets.versioned("assets/stylesheets/style.css")' /> 
</head> 

<body> 

    <script type='text/javascript' src='@routes.WebJarAssets.at(webJarAssets.locate("angular.js"))' /> 

    <script type="text/javascript"> 
    var abstractA = {}; 
    abstractA.module = angular.module('abstractA', []); 
    abstractA.module.controller('abstractACtrl', ['$http', AbstractACtrl]); 

    function AbstractACtrl($http) { 
     var controller = this; 
     this.name = "Abstract A Controller"; 
     this.abc = "hi"; 
     console.log("log beginning of controller"); 
     console.error("error beginning of controller"); 
     this.originalAs = @aDocs; 

     this.setUrl = function() { 
     console.error("error in setUrl"); 
     console.log("log in setUrl"); 
     }; 
    } 
    </script> 

<div data-ng-app='abstractA' x-ng-controller='AbstractACtrl as abstractACtrl'> 
    ... 
    <div ng-repeat="originalA in abstractACtrl.originalAs"> 
     <p>{{originalA}}</p> 
    </div> 
    <p>{{abstractACtrl.abc}}</p> 
    <p>{{abc}}</p> 
    <button ng-click='abstractACtrl.setUrl()'>Click!</button> 
</div> 
</body> 
</html> 

ответ

0

я понял, решение. Это не было зафиксировано нигде ...

я должен был изменить эту строку:

this.originalAs = @aDocs; 

к:

this.originalAs = "@aDocs"; 

Затем преобразовать его в список с помощью Javascript (сплит) функции для используйте в остальной части страницы.

По какой-то причине ошибка синтаксического анализа привела к тому, что оператор ошибки не смог найти сам модуль. Взял кучу проб и ошибок, чтобы понять, что это была основная причина.