perminovma
@perminovma

Не работает AngularJS в модальном окне Bootstrap. Почему?

Всем привет! Дабы не тратить ваше время зря, перейду сразу к делу.

У меня есть 2 файла:
  • index.html – главная страница сайта на которой есть кнопка «Вход»;
  • authorization_modal.html – файл, содержимое которого заполняет модальное окно.


В самом index.html ангуляр работает ( код[[1+1]]преобразовывается в теле документа в 2). Но когда я нажимаю на кнопку «Вход» и появляется модальное окно, то в нем [[1+1]] ни во что не преобразовывается и так и выводится — т. е. Ангуляр в модальном окне работать не хочет.

Сразу хочу сказать, что код типа{% … %}и тп в приведенном ниже листинге - это часть разметки веб-фреймворка Django, и он работает как надо.

Код кнопки в index.html:
…
<a href="{% url 'profile:authorization' %}" class="btn btn-outline btn-lg inverse" data-toggle="modal" data-target="#login_modal">Вход</a>
<!-- Modal HTML -->
<div class="modal fade" id="login_modal" tabindex="-1" role="dialog" aria-labelledby="login" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <!-- Content will be loaded here from "profile:authorization" url-->
        </div>
    </div>
</div>
…


Код мобального окна authorization_modal.html:

{% load staticfiles extra_filters %}

<div class="modal-content">
    <div class="modal-body">

        <form method="POST" class="form-horizontal" ng-submit="submit()" ng-controller="AuthorizationController"> {% csrf_token %}
            {% for field in form %}
                <div class="form-group form-group-lg">
                    <label for="{{ field.id_for_label }}">{{ field.errors }}</label>
                    <input ng-model="{{ field.name }}" value="{% if field.value %}{{ field.value }}{% endif %}" type="{{ field|get_field_type }}"
                           class="form-control" name="{{ field.name }}" id="{{ field.id_for_label }}"
                           placeholder="{{ field.help_text }}" required>
                </div>
            {% endfor %}

            <div class="modal-footer text-center">
                [[1+1]]
                <button type="button" class="btn btn-default" data-dismiss="modal">Отмена</button>
                <button type="submit" id="submit" class="btn btn-default">Вход</button>
            </div>
        </form>
    </div>
</div>


Ангуляровский код:
var app = angular.module('eworld_base_module', []);

app.config(function ($interpolateProvider) {
    // allow django templates and angular to co-exist
    $interpolateProvider.startSymbol('[[');
    $interpolateProvider.endSymbol(']]');
});

app.controller(
    "AuthorizationController",
    function ($scope, $http) {
        $scope.namee = "Mihail";


        $scope.submit = function () {

            alert($scope.email + " " + $scope.password);
                });
        };
    });


Я пытался добавить подключение скрипта angular.min.js прямо в authorization_modal.html, но в консоль пишет ошибку, что я пытаюсь подключить ангуляр второй раз.

Я пытался добавитьng-app в authorization_modal.html но из этого так же ничего не вышло.

Может быть у кого-нибудь есть идеи, что я делаю не так?

Заранее большое спасибо за ответ.
  • Вопрос задан
  • 1086 просмотров
Решения вопроса 3
@zolotykh
web-разработчик
Ответ написан
Комментировать
AMar4enko
@AMar4enko
Потому что модальное окно, по всей видимости, у вас стандартное бутстраповое, которое вставляет разметку в документ через jQuery.
Чтобы ангуляр видел в разметке свои байндинги и директивы, нужно, чтобы разметкой управлял он сам, через использование директив.
Поэтому и были написаны ui.bootstrap и ngStrap модули для ангуляра, которые добавляют функциональность бутстраповых плагинов.
Ответ написан
MAKAPOH
@MAKAPOH
многостаночник
Вы похоже пытаетесь использовать jQuery версию bootstrap вместе с angular, если так то я бы посоветовал взять angular обертку для bootstrap.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы