0

入力要素を1つ作成し、アイテムリストを選択した後にアイテムリストを表示するにはget hideをクリックします。角度jsの入力要素に手動でフォーカスを設定

しかし、焦点は、それが降り、その要素にない、

だから私はちょうどラジオボタンリストが非表示を取得するときに手動で入力要素にフォーカスを設定します。ここで

ビュー

<label class="item item-input item-stacked-label" ng-click="showDays()"> 
      <span class="input-label black-text">DAYS</span> 
      <span class="input-ctrl"> 
      <input type="text" id="days" readonly ng-model="data_day" focus-on="!daysflag"> 
      </span> 
</label> 
<div ng-show="daysflag"> 
      <ion-radio icon="ion-ios-checkmark" ng-model="data_day" ng-value="{{day}}" ng-repeat="day in days" ng-click="hideDayFlag()">{{day}}</ion-radio> 
</div> 

コントローラ

 $scope.days = [1, 2, 3, 4, 5, 6, 7]; 

     $scope.showDays = function() { 
      $scope.daysflag = true; 
     } 
     $scope.hideDayFlag = function() { 
      $scope.daysflag = false; 
     } 

指令

、次のコードを使用しています
.directive('focusOn',function($timeout) { 
      return { 
       restrict : 'A', 
       link : function($scope,$element,$attr) { 
        $scope.$watch($attr.focusOn,function(_focusVal) { 
         $timeout(function() { 
          _focusVal ? $element[0].focus() : 
           $element[0].blur(); 
         }); 
        }); 
       } 
      } 
     }); 

この問題を解決するのを手伝ってください。

答えて

1

機能scope.$watchを使用するのは間違いです。 scope.$watchは、$ scopeの変更を追跡するために使用されます。

explanationを参照してください。

jsfiddleの例。

angular.module('ExampleApp', []) 
 
    .controller('ExampleController', function() { 
 
    var vm = this; 
 
    vm.isFocus = false; 
 
    }) 
 
    .directive('focusOn', function() { 
 
    return { 
 
     restrict: 'A', 
 
     scope: { 
 
     focusOn: "=" 
 
     }, 
 
     link: function(scope, $element, $attr) { 
 
     scope.$watch('focusOn', function(_focusVal) { 
 
      _focusVal ? $element[0].focus() : 
 
      $element[0].blur(); 
 
     }); 
 
     $element.on("focus", function() { 
 
      scope.$applyAsync(function() { 
 
      scope.focusOn = true; 
 
      }); 
 
     }); 
 
     $element.on("blur", function() { 
 

 
      scope.$applyAsync(function() { 
 
      scope.focusOn = false; 
 
      }); 
 
     }) 
 
     } 
 
    } 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="ExampleApp"> 
 
    <div ng-controller="ExampleController as vm"> 
 
    <input ng-model="vm.countRow" focus-on="vm.isFocus"> 
 
    <input type="button" value="Focus" ng-click="vm.isFocus=true"> 
 
    <input type="button" value="Blur" ng-click="vm.isFocus=false">{{vm.isFocus}} 
 
    </div> 
 
</div>

+0

ご回答いただきありがとうございますが、私の問題のためにそのがNG-ショーは隠します偽とリストを取得するとき、私は問題を持っている –

+0

を働いていない、その後の焦点は、HTMLの入力フィールドに直接に –

+0

に行きますあなたの問題を解決するには、あなたは 'focusOn'命令を作成します。この指令は機能しません!あなたは*を書くので、ラジオボタンリストが隠れる*ときに、入力要素にフォーカスを手動で設定したいだけです。そして私はそれをする。入力要素にフォーカスを手動で設定します。 –

関連する問題