Javascript 基本角度输入控制

Javascript 基本角度输入控制,javascript,jquery,angularjs,cookies,cookiestore,Javascript,Jquery,Angularjs,Cookies,Cookiestore,我有一个基本的输入控件,它有三个绑定事件。该控件显示年份值。在每个事件中,控件都应该将其值存储在cookie中,以便在页面刷新时,当前值保持不变 事件: myApp.controller('TimeframeCtrl', ['$scope', '$cookieStore', function ($scope, $cookieStore) { // If

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

事件:

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');
}]);
<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>
  • onchange
    输入本身(显然)
  • 输入左侧的箭头将使其递增
  • 向右的箭头使其递减
  • 我知道如何在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');
    }]);
    
    <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>
    
    HTML:

    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');
    }]);
    
    <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" />
    

    但实际上,您应该创建一个,而不是一个控制器,这样您就能够重用您的组件

    使用
    ng model
    绑定到
    $scope.year

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

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

    您可以这样做:

    html
    你可以这样做:

    html
    我建议您对此使用指令,而不是控制器。然后在
    link
    函数中实现它的jquery逻辑。我建议您为此使用指令,而不是控制器。然后在
    link
    函数中实现它的jquery逻辑。。。我不需要重复使用它。不过谢谢。哦。。。我不需要重复使用它。谢谢你。