Отдельные файлы контроллера AngularJS с локальной страницей HTML - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь запустить локальную веб-страницу с AngularJS с динамически управляемыми контроллерами.Я хотел бы, чтобы переменная URL указывала, какой конкретный файл javascript загружается с данными для управления моей страницей.

HTML-файл

<html>
    <head >
        <script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js'></script>
        <script>
            var app = angular.module("myApp", []);
        </script>

        <script>
            var url = new URL(window.location.href);
            var t_var= url.searchParams.get("t_var");
            var x = document.createElement('script');
            x.src = t_var +'.js';
            document.getElementsByTagName("head")[0].appendChild(x);
        </script>
    </head>
    <body ng-app='myApp' ng-controller='Ctrl1'>
        {{sub1Variable}}
    </body>
</html>

контроллер AngularJS

app.controller("Ctrl1", function($scope) {
    $scope.sub1Variable = 'sub1'
});

Я смог заставить это работать, если я включил тег HTML ниже в файл HTML.

<script src="sub1.js"></script>

Я получаю сообщение об ошибке, что контроллер сна это имя нет ссылки.

1 Ответ

0 голосов
/ 28 мая 2019

В принципе то, что вы здесь делаете, должно быть хорошо. Смотри ниже.

app.controller("Ctrl1", function($scope) {
    $scope.sub1Variable = 'sub1'
});
<html>
    <head >
        <script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js'></script>
        <script>
            var app = angular.module("myApp", []);
        </script>
    </head>
    <body ng-app='myApp' ng-controller='Ctrl1'>
        {{sub1Variable}}
    </body>
</html>

Если вы запустите это, вы должны увидеть 'sub1' в выводе.

Итак, если вы получаете сообщение об ошибке, в котором говорится, что ваш контроллер не зарегистрирован, то почти наверняка проблема в том, что вы не загружаете файл JavaScript, содержащий регистрацию вашего контроллера. Убедитесь, что сценарий, содержащий строку app.controller..., включен через элемент <script> в какой-то момент после загрузки углового и регистрации модуля.

(Помните, что SO Snippet, CodePen и т. Д. Будут неявно включать JavaScript для удобства, в реальном коде мы должны сделать это сами).

На самом деле, если это просто быстрое локальное приложение, может быть, вы можете просто включить его в тот же элемент скрипта, что и при регистрации модуля, например:

<html>
    <head >
        <script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js'></script>
        <script>
            var app = angular.module("myApp", []);
            app.controller("Ctrl1", function($scope) {
                 $scope.sub1Variable = 'sub1'
            });
        </script>
    </head>
    <body ng-app='myApp' ng-controller='Ctrl1'>
        {{sub1Variable}}
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...