3 回答

TA貢獻1828條經(jīng)驗 獲得超13個贊
顯然,這是Angular的已知問題,目前已打開
除了像您正在嘗試的工作以外,我不確定您可以在這里做什么??磥砟饺胝?。我無法讓我的瀏覽器記住您的密碼,因此不確定是否可以使用,但請看一下:
app.directive('autoFillSync', function($timeout) {
return {
require: 'ngModel',
link: function(scope, elem, attrs, ngModel) {
var origVal = elem.val();
$timeout(function () {
var newVal = elem.val();
if(ngModel.$pristine && origVal !== newVal) {
ngModel.$setViewValue(newVal);
}
}, 500);
}
}
});
<form name="myForm" ng-submit="login()">
<label for="username">Username</label>
<input type="text" id="username" name="username" ng-model="username" auto-fill-sync/><br/>
<label for="password">Password</label>
<input type="password" id="password" name="password" ng-model="password" auto-fill-sync/><br/>
<button type="submit">Login</button>
</form>
我認為您只需要稍微簡化一下方法即可。我絕對推薦的一件事是檢查ngModel.$pristine并確保您不會覆蓋某些不良用戶的輸入。另外,3秒可能太長。您不必在$ timeout中調(diào)用$ apply(),順便說一句,它應(yīng)該為您自動排隊$ digest。
真正的收獲是:您的瀏覽器會擊敗Angular來執(zhí)行嗎?那我的瀏覽器呢?
這可能是一場無法戰(zhàn)勝的戰(zhàn)爭,這就是Angular(或淘汰賽)無法輕松解決它的原因。指令初次執(zhí)行時,無法保證輸入中數(shù)據(jù)的狀態(tài)。甚至在Angular初始化時也沒有。...因此,這是一個棘手的問題。
添加回答
舉報