Javascript angularjs表单输入建议
我对angularjs中的表单有问题 经典html和php示例Javascript angularjs表单输入建议,javascript,php,forms,angularjs,Javascript,Php,Forms,Angularjs,我对angularjs中的表单有问题 经典html和php示例 <form name="myForm" action="post.php" method="post" autocomplete="on"> <input name="namename" type="text" /> <input name="email" type="text" /> <input name="submit" typ
<form name="myForm" action="post.php" method="post" autocomplete="on">
<input name="namename" type="text" />
<input name="email" type="text" />
<input name="submit" type="submit" value="submit" />
</form>
这和预期的一样。在第二次访问中,在我第一次提交表单之后,我只需要键入第一个字母,输入字段将根据第一篇文章给出一些建议
在角度上相同的形式
<form name="myForm" ng-submit="test(user)" autocomplete="on">
<input name="name" type="text" ng-model="user.name" autocomplete="given-name" />
<input name="email" type="text" ng-model="user.email" />
<input name="submit" type="submit" value="submit" />
</form>
在第二次访问这里时,表格将毫无提示,这非常令人恼火
有没有解决办法
范例
提前感谢。您所描述的行为是由浏览器完成的,并不保证在所有情况下都有效。用AngularJS实际上很容易做到;只需跟踪共享状态对象。这可以通过几种方式完成,最简单的方法是使用以下方法:
// Create an injectable object with the name 'userInput'
angular.module('myApp').value('userInput', {});
angular.module('myApp').controller('MyController', function($scope, userInput) {
// Assign the state object to the scope so it's available for our view
$scope.user = userInput;
});
现在,将此对象注入正在处理表单的控制器,如下所示:
// Create an injectable object with the name 'userInput'
angular.module('myApp').value('userInput', {});
angular.module('myApp').controller('MyController', function($scope, userInput) {
// Assign the state object to the scope so it's available for our view
$scope.user = userInput;
});
按原样渲染表单,您将看到表单的状态保持不变。事实上,在使用Angular编程时,这是一个隐藏的宝石,因为它允许您保留非常复杂的状态信息,而这在以前是非常不切实际的
编辑
让自动完成工作的一种方法是维护数据列表元素。只需将先前输入的值存储在数组中,并使用ng repeat
渲染所有选项。使用list
属性将输入元素与数据列表相关联,就可以开始了
<input list="nameHistory" type="text" ng-model="user.name" />
<datalist id="nameHistory">
<option ng-repeat="item in userHistory.name" value="{{ item }}"></option>
</datalist>
您所描述的行为是由浏览器完成的,并不保证在所有情况下都有效。用AngularJS实际上很容易做到;只需跟踪共享状态对象。这可以通过几种方式完成,最简单的方法是使用以下方法:
// Create an injectable object with the name 'userInput'
angular.module('myApp').value('userInput', {});
angular.module('myApp').controller('MyController', function($scope, userInput) {
// Assign the state object to the scope so it's available for our view
$scope.user = userInput;
});
现在,将此对象注入正在处理表单的控制器,如下所示:
// Create an injectable object with the name 'userInput'
angular.module('myApp').value('userInput', {});
angular.module('myApp').controller('MyController', function($scope, userInput) {
// Assign the state object to the scope so it's available for our view
$scope.user = userInput;
});
按原样渲染表单,您将看到表单的状态保持不变。事实上,在使用Angular编程时,这是一个隐藏的宝石,因为它允许您保留非常复杂的状态信息,而这在以前是非常不切实际的
编辑
让自动完成工作的一种方法是维护数据列表元素。只需将先前输入的值存储在数组中,并使用ng repeat
渲染所有选项。使用list
属性将输入元素与数据列表相关联,就可以开始了
<input list="nameHistory" type="text" ng-model="user.name" />
<datalist id="nameHistory">
<option ng-repeat="item in userHistory.name" value="{{ item }}"></option>
</datalist>
只需将此属性添加到输入标记
autocomplete=“off”
只需将此属性添加到输入标记autocomplete=“off”
谢谢您的回答,但这不是我的意思。我不想保存表单的状态。每个Broser都有一个内置表单自动填充常见输入字段(如用户名等)的历史记录。这正是我想要使用的,但chrome仅在表单实际执行post时保存此自动填充数据,这不是由angular完成的。我在上面的帖子中添加了一张图片。哦,我的错:S。。。我已经用一个可能的解决方案更新了答案,并加入了一个免费的plunker演示。谢谢你的回答,但这不是我的意思。我不想保存表单的状态。每个Broser都有一个内置表单自动填充常见输入字段(如用户名等)的历史记录。这正是我想要使用的,但chrome仅在表单实际执行post时保存此自动填充数据,这不是由angular完成的。我在上面的帖子中添加了一张图片。哦,我的错:S。。。我已经用一个可能的解决方案更新了答案,并加入了一个免费的plunker演示。感谢您提供答案!你能再补充一点细节吗?谢谢你的回答!你能再补充一点细节吗?