基本角度输入控制

时间:2014-06-14 21:01:26

标签: javascript jquery angularjs cookies cookiestore

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

活动:

  1. onchange input本身(显然)
  2. input左侧的箭头增加
  3. 向右箭头递减
  4. 我知道如何在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>
    

2 个答案:

答案 0 :(得分:4)

使用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
   });

但实际上你应该创建一个directive,而不是一个控制器,而不是你可以重用你的组件

答案 1 :(得分:1)

你可以这样做:

HTML

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

然后:

JS

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