Angularjs UI模态表单

Har*_*rry 13 javascript twitter-bootstrap angularjs angular-ui angular-ui-bootstrap

我曾经有一个使用bootstrap模式的登录对话框:

  $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(...);
      }
    }
  };
Run Code Online (Sandbox Code Playgroud)

登录表单如下所示:

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")
Run Code Online (Sandbox Code Playgroud)

在角度ui 0.4和angularjs 1.1.3中,这很好.

我已经更新到最新的角度ui 0.6和1.2rc2,现在这已经不再适用了.具体$scope.user不再与表格中的那个相同.如何获取表单元素的$ scope?我在batarang中看到它,但不是来自loginDialog控制器.

谢谢

mor*_*man 27

resolve在打开的模型对象上缺少该属性.这是将本地传递给模态控制器的新方法.

从ui-bootstrap文档:

resolve - 将被解析并作为本地人传递给控制器​​的成员; 它等同于AngularJS路由的resolve属性

更新的代码和工作的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;
                }
            }
        });
    };
};
Run Code Online (Sandbox Code Playgroud)

  • **专业提示**:如果使用登录模式,请将其设为[有状态](http://www.theodo.fr/blog/2015/07/stateful-modals-with-angular-ui-router/)以获得更好的效果人机工程学. (2认同)

小智 5

继续上述回复,我分叉了一下,并做了一些小改动:

使用的版本:

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

另一个重要区别是,user对象现在从HTML模板传递,这可能是您可能有一个项目列表显示的情况,并且您希望通过传递表示单击列表项的对象来打开模式对话框.

Plunker位于:http://plnkr.co/edit/bfpma2?p = preview