3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
顯然,這是Angular的已知問題,目前已打開
除了像您正在嘗試的工作以外,我不確定您可以在這里做什么??磥砟饺胝?。我無法讓我的瀏覽器記住您的密碼,因此不確定是否可以使用,但請(qǐng)看一下:
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>
我認(rèn)為您只需要稍微簡(jiǎn)化一下方法即可。我絕對(duì)推薦的一件事是檢查ngModel.$pristine并確保您不會(huì)覆蓋某些不良用戶的輸入。另外,3秒可能太長(zhǎng)。您不必在$ timeout中調(diào)用$ apply(),順便說一句,它應(yīng)該為您自動(dòng)排隊(duì)$ digest。
真正的收獲是:您的瀏覽器會(huì)擊敗Angular來執(zhí)行嗎?那我的瀏覽器呢?
這可能是一場(chǎng)無法戰(zhàn)勝的戰(zhàn)爭(zhēng),這就是Angular(或淘汰賽)無法輕松解決它的原因。指令初次執(zhí)行時(shí),無法保證輸入中數(shù)據(jù)的狀態(tài)。甚至在Angular初始化時(shí)也沒有。...因此,這是一個(gè)棘手的問題。
添加回答
舉報(bào)