Подтвердить что ты не робот

Модиальные формы UML Angularjs

У меня было диалоговое окно входа в систему с использованием bootstrap modal:

  $scope.loginDialog = {
    backdrop: true,
    keyboard: true,
    windowClass: "modal loginDialog",
    backdropClick: true,
    templateUrl: '/tmpl/user/loginForm',
    controller: function dialogController($scope, $modalInstance) {
      $scope.submit = function () {
        $http.post('/api/login', $scope.user).success(...);
      }
    }
  };

Форма входа выглядит следующим образом:

form#loginBox(ng-submit="submit()")
  .modal-body.login-box
    .formItem
      label(for='user[usernameOrEmail]') Name or Email:
      input(type='text', name='user[usernameOrEmail]', required="required", value='', ng-model="user.user")
    .formItem
      label(for='user[password]') Password:
      input(name='user[password]', type='password', value='', required="required", ng-model="user.password")
  .modal-footer
    input.btn.btn-primary( type="submit", value="Login")

В angular ui 0.4 и angularjs 1.1.3 это работало нормально.

Я обновил до последних angular ui 0.6 и 1.2rc2, и теперь это больше не работает. В частности, $scope.user уже не совпадает с формой в форме. Как получить $scope элемента формы? Я вижу это в batarang, но не от контроллера loginDialog.

Спасибо

4b9b3361

Ответ 1

Вам не хватает свойства resolve на открытом объекте модели. Это новый способ передачи локальным пользователям вашего модального контроллера.

Из документации ui-bootstrap:

resolve - члены, которые будут разрешены и переданы контроллеру как локальные жители; это эквивалентно свойству разрешения для AngularJS маршруты

Обновлен код и рабочий plunker

angular.module('plunker', ['ui.bootstrap']);
var ModalDemoCtrl = function ($scope, $modal, $log) {

    $scope.user = {
        user: 'name',
        password: null
    };

    $scope.open = function () {

        $modal.open({
            templateUrl: 'myModalContent.html',
            backdrop: true,
            windowClass: 'modal',
            controller: function ($scope, $modalInstance, $log, user) {
                $scope.user = user;
                $scope.submit = function () {
                    $log.log('Submiting user info.');
                    $log.log(user);
                    $modalInstance.dismiss('cancel');
                }
                $scope.cancel = function () {
                    $modalInstance.dismiss('cancel');
                };
            },
            resolve: {
                user: function () {
                    return $scope.user;
                }
            }
        });
    };
};

Ответ 2

В продолжение вышеприведенного ответа я разблокировал плункер и сделал несколько незначительных изменений:

Используемые версии:

  • angularjs: 1.2.11
  • angular -ui-bootstrap: 0.10.0
  • bootstrap: 3.1.0

Другое важное отличие состоит в том, что объект user теперь передается из шаблона HTML, что может быть случайным, когда у вас может быть список отображаемых элементов, и вы хотели бы открыть модальный диалог, передав объект, представляющий элемент списка нажат.

Plunker находится по адресу: http://plnkr.co/edit/bfpma2?p=preview