如何创建包含多个输入控件的自定义 angular 指令?
How to create a custom angular directive which contains multiple input controls?
我正在做我的第一个 angular 项目。无论好坏,我都试图将几乎所有可重复的 HTML 转换为指令。我有一个要求让用户 select 以 HH:MM 格式的时间。所以我需要显示两个 SELECT 元素。因为我需要在很多地方提供这种控制,所以我试图转换成一个指令。
指令模板
<div class="filterLabel">{{fieldLabel}}</div>
<select class="FilterDDL" ng-style="{width: selectHhWidthPx + 'px'}">
<option value="none">HH</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
</select>
<span>:</span>
<select class="FilterDDL" ng-style="{width: selectHhWidthPx + 'px'}">
<option value="none">MM</option>
<option value="0">00</option>
<option value="30">30</option>
</select>
我预期此指令的最终结果是获取以分钟为单位的时间值 [(HH * 60 + MM)] 以供进一步计算。但是,我想不出一种方法可以使我的指令关联一个 ngModel,该指令 returns 从两个下拉列表的组合中以分钟为单位的时间。我阅读了 Link 函数,但不知道是否可以在我的场景中使用它。让自定义指令跨越多个输入元素甚至是一个好习惯吗?
请参考以下代码:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<script src="angular.min.js"></script>
<script type="text/javascript">
angular.module('demoApp', [])
.controller('Controller', ['$scope', function ($scope) {
$scope.totalMinutes = function () {
return $scope.mintutes + ($scope.hours * 60);
}
$scope.mintutes = 1;
$scope.hours = 1;
}])
.directive('timeSelection', function () {
return {
restrict: 'E',
template: "Hours:<input type='number' ng-model='hours' /> Minutes:<input type='number' ng-model='minutes' />",
scope: {
hours: "=hours",
minutes:"=mintutes"
}
};
});
</script>
</head>
<body>
<div ng-app="demoApp">
<div ng-controller="Controller">
<time-selection hours="hours" mintutes="mintutes" ></time-selection>
Total Minutes : {{totalMinutes()}}
</div>
</div>
</body>
</html>
我正在做我的第一个 angular 项目。无论好坏,我都试图将几乎所有可重复的 HTML 转换为指令。我有一个要求让用户 select 以 HH:MM 格式的时间。所以我需要显示两个 SELECT 元素。因为我需要在很多地方提供这种控制,所以我试图转换成一个指令。
指令模板
<div class="filterLabel">{{fieldLabel}}</div>
<select class="FilterDDL" ng-style="{width: selectHhWidthPx + 'px'}">
<option value="none">HH</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
</select>
<span>:</span>
<select class="FilterDDL" ng-style="{width: selectHhWidthPx + 'px'}">
<option value="none">MM</option>
<option value="0">00</option>
<option value="30">30</option>
</select>
我预期此指令的最终结果是获取以分钟为单位的时间值 [(HH * 60 + MM)] 以供进一步计算。但是,我想不出一种方法可以使我的指令关联一个 ngModel,该指令 returns 从两个下拉列表的组合中以分钟为单位的时间。我阅读了 Link 函数,但不知道是否可以在我的场景中使用它。让自定义指令跨越多个输入元素甚至是一个好习惯吗?
请参考以下代码:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<script src="angular.min.js"></script>
<script type="text/javascript">
angular.module('demoApp', [])
.controller('Controller', ['$scope', function ($scope) {
$scope.totalMinutes = function () {
return $scope.mintutes + ($scope.hours * 60);
}
$scope.mintutes = 1;
$scope.hours = 1;
}])
.directive('timeSelection', function () {
return {
restrict: 'E',
template: "Hours:<input type='number' ng-model='hours' /> Minutes:<input type='number' ng-model='minutes' />",
scope: {
hours: "=hours",
minutes:"=mintutes"
}
};
});
</script>
</head>
<body>
<div ng-app="demoApp">
<div ng-controller="Controller">
<time-selection hours="hours" mintutes="mintutes" ></time-selection>
Total Minutes : {{totalMinutes()}}
</div>
</div>
</body>
</html>