1

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

事件:

  1. onchange本身(input显然)
  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>
4

2 回答 2

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

但实际上你应该创建一个指令,而不是一个控制器,这样你才能重用你的组件

于 2014-06-14T21:26:48.607 回答
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); 
}
于 2014-06-14T21:53:04.567 回答