最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

讓angularjs支持瀏覽器自動填表

 更新時間:2014年11月10日 11:26:53   投稿:hebedich  
簡單來說Angular.js是google開發(fā)者設(shè)計(jì)和開發(fā)的一套前端開發(fā)框架,幫助你簡化前端開發(fā)的負(fù)擔(dān)。當(dāng)然,這里有很多其它的前端開發(fā)框架,但是如何選擇合適的前端框架對于我們這些開發(fā)人員來說就不是那么容易了!

最近有很多前端同學(xué)都抱怨說,登陸表單都不能記錄自己的賬號。這對于用單頁面(single-page applications)和使用ajax比較多的網(wǎng)頁來說,還是一個蠻普遍的問題。

UserApp是一個使用angularjs構(gòu)建的WebApp,但是他一直未能支持瀏覽器的"save password"特性。
下面就列出了一些發(fā)現(xiàn)的問題:

表單不能用js動態(tài)的插入DOM。
表單必須真正的發(fā)出一個POST請求。(不能獲取表單內(nèi)容,然后用ajax發(fā)出請求)
當(dāng)瀏覽器自動填表后,$scope并不能獲得更新后的數(shù)據(jù)。
Firefox相對來說簡單一點(diǎn),只要表單元素有name屬性,觸發(fā)提交事件之后,它就會自動提醒用戶是否記錄數(shù)據(jù)。

復(fù)制代碼 代碼如下:

<form name="login-form" ng-submit="login()">
    <input id="login" name="login" type="text" ng-model="user.login">
    <input id="password" name="password" type="password" ng-model="user.password">
</form>

firefox記錄數(shù)據(jù)的要求比較簡單

但是firefox有一個問題,在自動填表之后,$scope里的數(shù)據(jù)并不會更新。所以我google了一下,發(fā)現(xiàn)了一些針對此問題的hacks。但是總感覺這些解決方案沒必要,因?yàn)槲倚枰闹皇窃谔峤槐韱蔚臅r候?qū)?shù)據(jù)帶上,而不是一些很溜逼的數(shù)據(jù)雙向綁定技術(shù)。所以我就采用了很簡單的辦法:在提交表單的時候獲取表單元素的值。

復(fù)制代碼 代碼如下:

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

OK,現(xiàn)在firefox沒問題了,但是chrome怎么辦呢?

chrome只有在form表單真正發(fā)起POST請求的時候才會提示用戶是否儲存密碼,但這樣的話就不能用Ajax操作了。

下面是解決辦法:

當(dāng)表單發(fā)出Post請求時,用ng-submit截取,返回false將其阻止,同時用ajax提交數(shù)據(jù)。
當(dāng)ajax成功返回時,將session儲存在cookies里,再將表單重新提交一邊。
頁面重載的時候會發(fā)現(xiàn)已經(jīng)認(rèn)證過了,就將其重定向到主頁。
這會讓頁面刷新一次,但也就是登錄的時候需要刷新而已,確保頁面返回時是同一個地址就行了。
但如果表單是被動態(tài)添加進(jìn)DOM的時候,這個方法仍然不行。解決方案就是在index.html中添加一個隱藏的表單,需要提交數(shù)據(jù)的時候就將其它表單攜帶的數(shù)據(jù)復(fù)制到隱藏表單里。

我將它打包成了一個directive:

復(fù)制代碼 代碼如下:

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;
        };
    }
};
});

在index.html里隱藏的表單:

復(fù)制代碼 代碼如下:

<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>

臨時登錄表單

復(fù)制代碼 代碼如下:

<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>

登錄用的controller:

復(fù)制代碼 代碼如下:

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

    function ajaxCallback() {
        submit();
    }  

    return false;
};

刷新時會提示是否重新提交表單

現(xiàn)在這個問題解決了,但是每當(dāng)你按下f5的時候,瀏覽器都會提醒你要不要重新提交表單。這確實(shí)有點(diǎn)蛋疼,所以我添加了一個pre-login.html文件,隱藏的表單會提交數(shù)據(jù)到這里,然后再重定向到index.html。

現(xiàn)在OK了~

相關(guān)文章

  • 淺談AngularJS中$http服務(wù)的簡單用法

    淺談AngularJS中$http服務(wù)的簡單用法

    這篇文章主要介紹了淺談AngularJS中$http服務(wù)的簡單用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Angular動態(tài)綁定樣式及改變UI框架樣式的方法小結(jié)

    Angular動態(tài)綁定樣式及改變UI框架樣式的方法小結(jié)

    AngularJS 是一個 JavaScript 框架。它是一個以 JavaScript 編寫的庫。這篇文章主要介紹了Angular動態(tài)綁定樣式及改變UI框架樣式的方法小結(jié),需要的朋友可以參考下
    2018-09-09
  • AngularJs  Using $location詳解及示例代碼

    AngularJs Using $location詳解及示例代碼

    本文主要介紹AngularJs Using $location的知識資料,這里整理了相關(guān)的資料,及簡單示例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • AngularJS表單驗(yàn)證功能

    AngularJS表單驗(yàn)證功能

    這篇文章主要為大家詳細(xì)介紹了AngularJS表單驗(yàn)證功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 在angular 6中使用 less 的實(shí)例代碼

    在angular 6中使用 less 的實(shí)例代碼

    這篇文章主要介紹了在angular 6中使用 less 的實(shí)例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • AngularJS中的表單簡單入門

    AngularJS中的表單簡單入門

    本文主要介紹AngularJS 表單,這里對AngularJS 表單知識做了詳細(xì)整理介紹,希望能幫助有需要的小伙伴
    2016-07-07
  • angular學(xué)習(xí)之從零搭建一個angular4.0項(xiàng)目

    angular學(xué)習(xí)之從零搭建一個angular4.0項(xiàng)目

    本篇文章主要介紹了從零搭建一個angular4.0項(xiàng)目,主要用到的工具angular4.0、angular-cli、npm(v3.10.8)、node(v6.2.0),有興趣的可以了解一下
    2017-07-07
  • angularjs自定義過濾器demo示例

    angularjs自定義過濾器demo示例

    這篇文章主要介紹了angularjs自定義過濾器,結(jié)合完整實(shí)例形式分析了angularjs自定義過濾器相關(guān)原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-08-08
  • Angular2中Bootstrap界面庫ng-bootstrap詳解

    Angular2中Bootstrap界面庫ng-bootstrap詳解

    不知道大家有沒有留意,最近angular-ui團(tuán)隊(duì)終于正式發(fā)布了基于 Angular2的Bootstrap界面庫ng-bootstrap ,之前工作中一直在用 AngularJS 1.x 的UI Bootstrap , 因此對這個ng-bootstrap 也是很感興趣,所以第一時間進(jìn)行試用。這篇文章就給大家詳細(xì)介紹下ng-bootstrap。
    2016-10-10
  • angularjs 處理多個異步請求方法匯總

    angularjs 處理多個異步請求方法匯總

    這篇文章主要介紹了angularjs 處理多個異步請求方法匯總,需要的朋友可以參考下
    2015-01-01

最新評論

蛟河市| 西乡县| 湛江市| 巴中市| 尖扎县| 北海市| 文化| 资溪县| 彩票| 怀安县| 静海县| 邮箱| 堆龙德庆县| 昌吉市| 海晏县| 图木舒克市| 蓝田县| 保靖县| 东平县| 呼玛县| 启东市| 阿巴嘎旗| 故城县| 红河县| 小金县| 怀远县| 武安市| 普格县| 阳谷县| 任丘市| 习水县| 伊金霍洛旗| 宜兰市| 成武县| 清涧县| 六安市| 江达县| 九江市| 沙湾县| 桦川县| 浦县|