允许记住密码以使用AngularJS

时间:2015-08-25 16:21:14

标签: javascript angularjs passwords

好吧,我整个上午都在努力解决这个问题,尽管事实上这几年似乎已成为一个问题,但我找不到一个有效的解决方案。我已经看到Stack Overflow上的其他人问这个问题,但他们都没有工作答案。

我的Angular应用程序的登录表单工作正常,但Chrome或Opera中不会弹出记住密码对话框。它在Firefox中有效。我明白为什么它不起作用,但我的用户抱怨,我需要解决它。我该怎么办?

<form name="loginForm" ng-submit="login(user)">
  <div class="input-group">
    <input type="email" name="email" class="form-control" placeholder="Email" ng-model="user.email">
  </div>
  <div class="input-group">
    <input type="password" name="password" class="form-control" placeholder="Password" ng-model="user.password">
  </div>
  <button type="submit" class="btn btn-default">Login</button>
</form>

编辑: 好的,从几个不起作用的不同答案中,我能够拼凑出最终做到的东西,这只是将它变成一个完全正常的HTML表单,其中按钮是type =“submit”然后简单地放一个jQuery .click命令在我的javascript中调用登录功能。所以基本上,完全忽略了Angular的做法,这让我成为一只悲伤的熊猫。 : - \ Opera仍然无法正常工作,但我不在乎我的想法。

2 个答案:

答案 0 :(得分:0)

这是来自Timothy E. Johansson's blog的代码。我不相信。

&#13;
&#13;
app.directive("ngLoginSubmit", function(){
return {
    restrict: "A",
    scope: {
        onSubmit: "=ngLoginSubmit"
    },
    link: function(scope, element, attrs) {
        $(element)[0].onsubmit = function() {
            $("#login-login").val($("#login", element).val());
            $("#login-password").val($("#password", element).val());

            scope.onSubmit(function() {
                $("#login-form")[0].submit();
            });
            return false;
        };
    }
};
});

$scope.login = function(submit) {
    $scope.user = {
        login: $("#login").val(),
        password: $("#password").val()
    };

    function ajaxCallback() {
        submit();
    }   

    return false;
};
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

<form name="login-form" id="login-form" method="post" action="" style="display: none;">
    <input name="login" id="login-login" type="text">
    <input name="password" id="login-password" type="password">
</form>

<form name="login-form" autocomplete="on" ng-login-submit="login">
    <input id="login" name="login" type="text" autocomplete="on">
    <input id="password" name="password" type="password" autocomplete="on">
</form>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使用AngularJS并且没有jQuery的解决方案:

<form action="/" method="post" onsubmit="return false;">
    <input type="text" name="username" autocomplete="on" id="email" ng-model="user.email">
    <input type="password" id="password" name="password" autocomplete="on" ng-model="user.password">
    <button type="submit" ng-click="login()">Submit</button>
</form>

<强> Explantion

您的action代码中应包含form属性,button属性应具有type=submit属性。要阻止重新加载页面,请将onsubmit="return false;"添加到form标记。简单:)