基本角输入控制

Basic Angular Input Control

本文关键字:控制 输入      更新时间:2023-09-26

我有一个基本的输入控件,它有三个绑定事件。该控件显示年份值。对于每个事件,控件应该将其值存储在cookie中,以便在页面刷新时,当前值保持不变。

事件:

  1. input本身的onchange(显然)
  2. input左边的箭头使其递增
  3. 向右的箭头使它减小

我知道如何在JQuery中做所有这些,但我试图在Angular中设置这个控制器。当您增加/减少时,控件工作得很好,但是当用户手动编辑输入时,增加/减少功能都不起作用。我也怀疑这是一种非常糟糕的方式来构建这种类型的控制……下面是我尝试的代码:

JS:

myApp.controller('TimeframeCtrl', ['$scope',
                                   '$cookieStore',
                                   function ($scope, $cookieStore) {
  // If year cookie doesn't exist
  if($cookieStore.get('year') == null) { 
    // Create year cookie
    $cookieStore.put('year', 2014); 
  }
  // Decrement year
  $scope.prevYear = function() {
    $scope.year = $scope.year - 1;
    $cookieStore.put('year', $cookieStore.get('year') - 1); 
  }
  // Increment year
  $scope.nextYear = function() {
    $scope.year = parseInt($scope.year) + 1;
    $cookieStore.put('year', $cookieStore.get('year') + 1); 
  }
  // User manually changes year
  $scope.yearChange = function() {
    // Not implemented
  }
  // Set timeframe control value
  $scope.year = $cookieStore.get('year');
}]);
HTML:

<form class="navbar-form pull-left" ng-controller="TimeframeCtrl">
  <i class="fa fa-angle-left" ng-click="prevYear()"></i>
  <input class="form-control" type="text" value="{{year}}" placeholder="Year" ng-blur="yearChange()"/>
  <i class="fa fa-angle-right" ng-click="nextYear()"></i>
</form>

使用ng-model绑定$scope.year

<input class="form-control" type="text" ng-model="year" placeholder="Year" />

然后使用$watch检测更改

 $scope.$watch('year', function() {
      // year has been manually changed, put your save logic here
   });

但是你真的应该创建一个指令,而不是一个控制器,这样你就可以重用你的组件

你可以这样做:

html

<input class="form-control" type="text" ng-model="year" placeholder="Year" ng-change="yearChange()"/>

然后:

js

$scope.yearChange = function() {
  $cookieStore.put('year', $scope.year); 
}