Динамически загружать приложение angularjs в модале начальной загрузки? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть страница, index.blade.php. (без angularjs)

<body>
    <table>
        <!-- If i click on a row, I store its id in a global variable (selected_id), 
              then I can click on show_edit_modal to view its details -->
        <tr></tr> 
        <tr></tr>
    </table>
    <button id="show_edit_modal">Show Modal</button>
    <div id="edit_modal">
      <!-- empty at first -->
    </div>
    $('#show_edit_modal').click(function(){
       // Fetch view
        $.ajax({
            type: 'GET',
            url: '/get_edit/' + selected_id,
            success: function(response) {
                $('#edit_modal').html(response);
            }
        }); 
    });
</body>

Нажмите кнопку «Добавить» -> появится модальное окно.

По щелчку будет отправлен ajax-запрос, чтобы получить представление (edit.blade.php), которое будет размещено внутри этого модального окна. Не используя iframe. Запрос вернет файл вида / блейда.

В контроллере, получателе ajax-запроса:

$data = Model::find($id);

return view('edit', compact('data'));

edit.blade.php

<div ng-app="itemsModule">
    <div ng-controller="editController">
        ...
    </div>
</div>
<script src="angular.min.js">
<script src="/controllers/edit.js">

Это извлеченное представление содержит приложение angularjs. Скрипт библиотеки angularjs, скрипт контроллера, все загруженные внутри этого представления.

Возможно ли это? Если так, есть ли стандартный способ сделать это? Или мне стоит попробовать реструктуризацию?

Я попытался запустить это, и оно работает при первом клике, но когда я щелкаю по другой строке и пытаюсь редактировать детали, я получаю предупреждение о попытке загрузить angularjs более одного раза.

1 Ответ

0 голосов
/ 13 июля 2019

Мне удалось решить эту проблему с помощью AngularJS, ручной загрузки .

Я переместил angular.min.js на мой index.blade.php.

Тогда по моему edit.blade.php:

<div id="helloApp">
    I am an angular app
    <div ng-controller="editController">
        Mighty controller
        <span ng-cloak>@{{message}}</span>
    </div>
</div>
<script>
    var ang = angular.module('itemsModule', []);
    ang.controller('editController', function($scope, $http){
        console.log('init edit controller');
        $scope.message = 'hello';
    });

    angular.element(function() {
        angular.bootstrap(document.getElementById('helloApp'), ['itemsModule']);
      });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...