我有一个基本的输入控件,它有三个绑定事件。该控件显示年份值。在每个事件中,控件应将其值存储在cookie中,以便在页面刷新时,当前值保持不变。
活动:
onchange
input
本身(显然)input
左侧的箭头增加我知道如何在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>
答案 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)
你可以这样做:
<input class="form-control" type="text" ng-model="year" placeholder="Year" ng-change="yearChange()"/>
然后:
$scope.yearChange = function() {
$cookieStore.put('year', $scope.year);
}