[关闭]
@bornkiller 2015-03-09T10:33:15.000000Z 字数 1522 阅读 2265

Angularjs表单focus简易指令

angularjs


前言

Angularjs的思维方式是通过数据带动DOM变动,通常依托指令与控制器的配合来实现。就表单操作上,提供了几乎完备的操作体验。对于官方没有实现的功能,只能自己来实现。比如说在做表单校验时,使用编码方式实现控件的focus

简易表单

如下为一个简易表单,auto-focus-when为负责控件focus的指令。

  1. <form class="form-horizontal" name="form" role="form" ng-controller="FocusCtrl">
  2. <div class="form-group">
  3. <label for="username" class="col-sm-2 control-label" >用户名</label>
  4. <div class="col-sm-5">
  5. <input type="text" ng-model="username" name="username"
  6. id="username" class="form-control" auto-focus-when="usernameFocus" >
  7. </div>
  8. </div>
  9. <div class="form-group">
  10. <label for="bookname" class="col-sm-2 control-label" >书名</label>
  11. <div class="col-sm-5">
  12. <input type="text" ng-model="bookname" name="bookname"
  13. id="bookname" class="form-control" auto-focus-when="booknameFocus">
  14. </div>
  15. </div>
  16. </form>

自定义指令

指令内容比较简单,不做过多说明。

  1. angular.module('shuffleApp', [])
  2. .directive('autoFocusWhen', ['$log','$timeout', function($log, $timeout) {
  3. return {
  4. restrict: 'A',
  5. scope: {
  6. autoFocusWhen: '='
  7. },
  8. link: function(scope, element) {
  9. scope.$watch('autoFocusWhen', function(newValue) {
  10. if (newValue) {
  11. $timeout(function(){
  12. element[0].focus();
  13. })
  14. }
  15. });
  16. element.on('blur', function() {
  17. scope.$apply(function() {
  18. scope.autoFocusWhen = false;
  19. })
  20. })
  21. }
  22. }

控制器测试

此处控制器与指令本是同级,此处分开说明之用。通过控制器内部的变量控制,即可实现表单控件的focus控制。

  1. angular.module('shuffleApp', [])
  2. .controller('FocusCtrl', ['$scope', '$interval', function($scope, $interval) {
  3. $scope.usernameFocus = false;
  4. $scope.booknameFocus = true;
  5. $interval(function() {
  6. $scope.usernameFocus = $scope.usernameFocus ? false : true;
  7. $scope.booknameFocus = $scope.booknameFocus ? false : true;
  8. }, 1500, 3);
  9. }])

联系方式

QQ:491229492

Email: hjj491229492@hotmail.com

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注