2014-12-17 5 views
1

У меня есть ссылка при нажатии, она должна показывать другой вход и автофокус.Показать ввод и автофокусировку

<a ng-click="ctrl.switchAndFocus()" href="#">FOCUS</a> 

В контроллере у меня

this.switchAndFocus= function (){ 
     if (this.controler.data.radioOne == 'one') { 
      this.controler.data.radioTwo = "kmh"; 
      angular.element("#high").focus(); 
     } 
     else{ 
      this.controler.data.radioTwo = "kmh"; 
      angular.element("#low").focus(); 
     } 
    } 

(this.controler.data.radioOne кнопка радио со значением 'один', this.controler.data.radioTwo является raduibutton со значением 'KMH', angular.element ("# high") -> id из поля ввода)

Это работает, но я должен нажать ссылку 2 раза. Любая идея, как заставить его работать на 1 клик, чтобы переключиться и сфокусироваться?

+0

попытайтесь поместить фокус в $ таймаут с небольшой задержкой –

+0

даже 0 задержка будет делать это ... – MarcoS

+0

http://stackoverflow.com/questions/25596399/set -element-focus-in-angle-way – faby

ответ

1

https://github.com/hiebj/ng-focus-if

http://plnkr.co/edit/MJS3zRk079Mu72o5A9l6?p=preview

<input focus-if /> 

(function() { 
    'use strict'; 
    angular 
     .module('focus-if', []) 
     .directive('focusIf', focusIf); 

    function focusIf($timeout) { 
     function link($scope, $element, $attrs) { 
      var dom = $element[0]; 
      if ($attrs.focusIf) { 
       $scope.$watch($attrs.focusIf, focus); 
      } else { 
       focus(true); 
      } 
      function focus(condition) { 
       if (condition) { 
        $timeout(function() { 
         dom.focus(); 
        }, $scope.$eval($attrs.focusDelay) || 0); 
       } 
      } 
     } 
     return { 
      restrict: 'A', 
      link: link 
     }; 
    } 
})();