【问题标题】:Basic Angular Input Control基本角度输入控制
【发布时间】:2014-08-05 03:08:44
【问题描述】:

我有一个基本的输入控件,其中包含三个绑定事件。控件显示年份值。对于每个事件,控件都应将其值存储在 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>

【问题讨论】:

  • 我建议您为此使用指令,而不是控制器。然后在link函数中实现它的jquery逻辑

标签: javascript jquery angularjs cookies cookiestore


【解决方案1】:

使用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,而不是一个控制器,这样你才能重用你的组件

【讨论】:

  • 哦...好吧,我不需要重复使用它。不过还是谢谢。
【解决方案2】:

你可以这样做:

html

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

然后:

js

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2021-11-30
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多