【发布时间】:2013-02-04 15:14:05
【问题描述】:
在 AngularJS 中提交表单并使用浏览器记住密码功能时,在随后的登录尝试中,您让浏览器使用用户名和密码填写登录表单,$scope 模型不会根据自动填充。
我发现的唯一肮脏的技巧是使用以下指令:
app.directive("xsInputSync", ["$timeout" , function($timeout) {
return {
restrict : "A",
require: "?ngModel",
link : function(scope, element, attrs, ngModel) {
$timeout(function() {
if (ngModel.$viewValue && ngModel.$viewValue !== element.val()) {
scope.apply(function() {
ngModel.$setViewValue(element.val());
});
}
console.log(scope);
console.log(ngModel.$name);
console.log(scope[ngModel.$name]);
}, 3000);
}
};
}]);
问题在于ngModel.$setViewValue(element.val()); 不会根据element.val() 返回值更改模型或视图。我怎样才能做到这一点?
【问题讨论】:
-
这段代码乍一看还不错……但其余的(标记等)在哪里?你有我们能看到的小提琴或笨蛋吗?
-
这是 plunk:plnkr.co/edit/CHrBAVU9Ycl2ex2DRr6R 我不确定它是否直接在 plunker 上工作,因为它在 iframe 中运行。
-
您不需要在 Angular 的 $timeout 中设置范围。$apply。您可能需要在本机 window.setTimeout 中使用它。但最好使用 angular 的。
-
Angular 开发人员 tbosch 有一个 “官方”polyfill 修复 来解决这个问题。请在下面的答案stackoverflow.com/a/25687396/3009639 中查看详细信息。
-
不幸的是,“官方”修复是废弃软件,在许多浏览器中不起作用。问题已提交但未解决,因此搜索继续...
标签: javascript mvvm angularjs